一 Spring快速入门
1.导入Spring开发的基本包坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
2.编写Dao接口和实现类
比如UserDao、UserDaoImpl
3. 创建Spring核心配置文件
resources目录下新建配置文件 applicationContext.xml
4. 在Spring配置文件中配置DaoImpl的Bean
创建bean,id自己命名,class就是类的全路径
<bean id="UserDao" class="com.stepheng.dao.impl.UserDaoImpl"></bean>
5. 使用Spring的API获得Bean实例
获取xml文件;
使用getBean获取实例
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) app.getBean("UserDao");
userDao.save();
二 配置详解
1. scope属性
默认singleton单例,还可以设置prototype 多例,其他的request、session、global session在WEB项目中使用(不常用)。
<bean id="userDao" class="com.stepheng.dao.impl.UserDaoImpl" scope="singleton"></bean>
<bean id="userDao" class="com.stepheng.dao.impl.UserDaoImpl" scope="prototype"></bean>
理解:
选择singleton时,当Spring核心文件被加载,创建容器时,就通过无参构造器创建bean,只要容器在,对象一直在,直到销毁容器时对象被一起销毁;
prototype时,当调用getBean()方法时实例化Bean,只要对象在使用中,就一直在,直到对象长时间不用被Java垃圾回收器回收。
2. 初始化和销毁方法
init-method:初始化方法
destroy-method:销毁方法
<bean id="userDao" class="com.stepheng.dao.impl.UserDaoImpl" init-method="init" destroy-method="destory"></bean>
3. Bean实例化三种方式
无参构造方法(默认)
工厂静态方法 --- actory-method属性
<bean id="userDao" class="com.stepheng.factory.StaticFactory" factory-method="getUserDao"></bean>
工厂实例方法 --- factory-bean,factory-method
<bean id="factory" class="com.stepheng.factory.DynamicFactory"></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>
4. 配置总结:
<bean>标签
id属性:在容器中Bean实例的唯一标识,不允许重复
class属性:要实例化的Bean的全限定名
scope属性:Bean的作用范围,默认singleton单例,多实例是prototype
<property>标签:属性注入
name属性:属性名称
value属性:注入的普通属性值
ref属性:注入的对象引用值,引用的是beanid
<list>标签
<map>标签
<properties>标签
<constructor-arg>标签
<import>标签:导入其他的Spring配置文件
三 依赖注入
简介:它是Spring框架核心IOC的具体实现。IOC解耦只是降低他们的依赖关系,但不会消除。使用Spring,让Spring来维护而不用我们自己获取。
1. Bean两种依赖注入方式:构造方法,set方法(常用)
set方法:
1. 在类中设置属性,set方法
2. 在xml中配置属性:
<property name="userDao" ref="userDao"></property>
还有一种P命名空间方式注入,知道即可:
<bean id="userService" class="com.stepheng.service.impl.UserServiceImpl" p:userDao-ref="userDao"></bean>
2. 注入普通数据类型、集合等
注入普通数据类型
<property name="username" value="stepheng"></property>
<property name="age" value="22"></property>
注入集合数据类型
<property name="stringList">
<list>
<value>stepheng</value>
<value>sanguo</value>
<value>shuihu</value>
</list>
</property>
<property name="userDaoMap">
<map>
<entry key="key1" value-ref="user1"></entry>
<entry key="key2" value-ref="user2"></entry>
</map>
</property>
<property name="properties">
<props>
<prop key="p1">v1</prop>
<prop key="p2">v2</prop>
</props>
</property>
四 配置import
分模块开发思路,加载主配置文件,主配置文件引入其他配置文件即可
<import resource="applicationContext-service.xml"></import>
<import resource="applicationContext-user.xml"></import>
五 Spring相关API
1. ApplicationContexgt实现类
ClassPathXmlApplicationContext,从类的根路径加载配置文件,推荐这种
FileSystemXmlApplicationContext 从磁盘路径加载配置文件
AnnotationConfigApplicationContext 注解开发使用
2. getBean()方法
getBean(String s) 传的就是Bean的id
UserService userService = (UserService) app.getBean("userService");
getBean(Class<T>) 传的是类的类型,注意:如果用这种方式,容器中该类的类型只有一个Bean对象
UserService userService = app.getBean(UserService.class);