Spring:IOC之二
Bean的作用域
- 在Spring里,可以设置Bean创建的实例是单实例还是多实例
- 默认情况下是单实例对象。
- 单实例对象情况下:每次创建的对象的地址都是相同的(类似静态变量?)
- 通过
scope来设置是单例还是多例- 默认:singleton 单实例对象
- 设置为singleton 的时候,加载Spring配置文件时就会创建单实例对象。
- prototype:表示多实例对象
- 设置为prototype的时候,在调用
getBean方法的时候创建多实例对象。
- 设置为prototype的时候,在调用
- Request:表示request域对象
- session:表示session域对象
- 默认:singleton 单实例对象
Bean的生命周期
- 从对象的创建到对象的销毁的过程
- 执行无参构造创建bean实例
- 调用set方法设置属性值
- 把Bean实例传递给Bean后置处理器的方法
- 执行初始化方法
- 把Bean实例传递给Bean后置处理器的方法
- 创建bean实例对象
- 执行销毁方法
- Bean的后置处理器
- 创建一个类,实现BeanPostProcessor接口
- 重写两个方法
- 在配置文件中创建该类的对象则完成后置处理器的创建。
XML自动装配
什么是自动装配
-
根据指定装配规则(属性名称或者属性类型),Spring自动将匹配的属性进行注入
-
在
<bean>标签中设置autowire字段,可以实现自动装配- byName:通过属性名称注入
- byType:通过属性类型注入
-
外部属性文件的引入
-
引入外部德鲁伊数据连接池
-
在xml中配置context
xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context/spring-context.xsd -
引入外部文件
<context:property-placeholder location="classpath:hello.xml"/> -
创建德鲁伊数据连接池对象
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${pro.driver}"/> <property name="url" value="${pro.url}"/> <property name="username" value="${pro.username}"/> <property name="password" value="${pro.password}"/> </bean>
-
XML方式暂告一段落
基于注解方式实现对象创建
什么是注解
- 注解是代码的特殊标记,格式:@注解名(属性名=属性值,...)
- 使用注解:注解可以作用在类上,方法上面或者属性上面
- 使用注解的目的:简化xml配置
基于注解的对象创建
- @Component:一般注解
- @Service:一般用在Service层
- @Controller:一般用在Controller层
- @Repository:一般用在持久层(DAO)
- 上面的注解功能是一样的,都可以创建Bean实例,但是建议在对应的层使用对应的注解。
实现
- 引入aop依赖
spring-aop-5.2.6.RELEASE - 开启组件扫描
- 先在配置文件中添加context
- 然后开启组件扫描
<context:component-scan base-package="com.boerk"/> - 在类上加上注解
@Component(value="user")等价于先前在xml里配置的内容。也可以不加value,默认的value为类名切首字母小写
//pojo类
@Component(value="user")
public class User {
public void add(){
System.out.println("hello");
}
}
//test类
@Test
public void test1(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
User user = applicationContext.getBean("user", User.class);
user.add();
}
//打印出hello

浙公网安备 33010602011771号