控制反转、依赖注入
IoC 控制反转
控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责
DI(依赖注入)是其的一种实现方式,目的是创建对象且组装对象之间的关系
Bean容器的初始化
BeanFactroy提供配置结构和基本功能,加载并初始化Bean、ApplicationContext保存了Bean对象并在Spring中使用
ClassPathXmlApplicationContext 用于加载classpath下的xml、FileSystemXmlApplicationContext用于加载指定目录下的xml
初始化常通过加载配置文件方式,配置文件applicationContext.xml放在src根目录下
1 2 3 4 5
| String xmlPath = "applicationContext.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); UserService userService = (UserService) applicationContext.getBean("userService");
|
xml文件配置
1 2 3 4 5 6
| <bean id="userDao" class="com.ljc.dao.impl.UserDaoImpl"></bean> <bean id="userService" class="com.ljc.service.impl.UserServiceImpl"> <property name="userDao" ref="userDao"></property> </bean>
|
装配Bean
默认构造
静态工厂
1 2
| <bean id="" class="" factory-method="静态方法">
|
实例工厂
1 2 3 4 5
| <bean id="myBeanFactory" class="com.ljc.MyBeanFactory"></bean> <bean id="userService" factory-bean="myBeanFactory" factory-method="普通方法"></bean>
|
Scope Bean作用域
- singleton 单例,默认值
- prototype 每次请求时创建新的实例,destroy方式不生效
- request 每次http请求时创建实例且仅在当前requset内有效
- session 同上,当前session有效
Bean生命周期
1 2
| <bean id="" class="" init-method="初始化方法名称" destroy-method="销毁的方法名称">
|
Spring属性注入方式
设值注入
1 2 3
| <bean id="userService" class="com.ljc.service.impl.UserServiceImpl"> <property name="userDao" ref="userDao"/> </bean>
|
构造方法注入
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <constructor-arg> 用于配置构造方法一个参数argument name :参数的名称 value:设置普通数据 ref:引用数据,一般是另一个bean的id值 index :参数的索引号.从0开始,如果只有索引,匹配到了多个构造方法时,默认使用第一个 type :确定参数类型 <bean id="user" class="com.ljc.bean.User" > <constructor-arg name="username" value="jack"></constructor-arg> <constructor-arg index="1" type="java.lang.Integer" value="2"></constructor-arg> </bean>
|
setter方法注入
1 2 3 4 5 6 7 8 9 10
| <property name="" value="值"> <property name=""> <value>值</value> <property name="" ref="另一个bean"> <property name=""> <ref bean="另一个bean"/>
|
集合注入
1 2 3 4 5 6 7 8
| <property>添加子标签 数组:<array> List:<list> Set:<set> Map:<map> map存放k/v 键值对,使用<entry>描述 Properties:<props> <prop key=""></prop> 普通数据:<value> 引用数据:<ref>
|
基于注解装配Bean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @Component取代<bean class=""> @Component("id") 取代 <bean id="" class=""> @Component衍生注解(功能一样,方便标识) @Repository //dao层 @Service://service层 @Controller //web层 依赖注入 //给私有字段设置,也可以给setter方法设置 普通值:@Value("") 引用值: 方式1:按照类型注入 @Autowired 方式2:按照名称 @Autowired @Qualifier("名称") 或 @Resource("名称") 生命周期 初始化:@PostConstruct 销毁:@PreDestroy 作用域 @Scope("prototype") <!-- 注解使用前提,添加命名空间,让spring扫描含有注解类 --> <!-- 组件扫描,扫描含有注解的类 --> <context:component-scan base-package="含有注解的类的包名"></context:component-scan>
|