Spring:IOC之二

Bean的作用域

  • 在Spring里,可以设置Bean创建的实例是单实例还是多实例
  • 默认情况下是单实例对象。
  • 单实例对象情况下:每次创建的对象的地址都是相同的(类似静态变量?)
  • 通过scope来设置是单例还是多例
    • 默认:singleton 单实例对象
      • 设置为singleton 的时候,加载Spring配置文件时就会创建单实例对象。
    • prototype:表示多实例对象
      • 设置为prototype的时候,在调用getBean方法的时候创建多实例对象。
    • Request:表示request域对象
    • session:表示session域对象

Bean的生命周期

  • 从对象的创建到对象的销毁的过程
    1. 执行无参构造创建bean实例
    2. 调用set方法设置属性值
    3. 把Bean实例传递给Bean后置处理器的方法
    4. 执行初始化方法
    5. 把Bean实例传递给Bean后置处理器的方法
    6. 创建bean实例对象
    7. 执行销毁方法
  • 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方式暂告一段落


基于注解方式实现对象创建

什么是注解

  1. 注解是代码的特殊标记,格式:@注解名(属性名=属性值,...)
  2. 使用注解:注解可以作用在类上,方法上面或者属性上面
  3. 使用注解的目的:简化xml配置

基于注解的对象创建

  1. @Component:一般注解
  2. @Service:一般用在Service层
  3. @Controller:一般用在Controller层
  4. @Repository:一般用在持久层(DAO)
  5. 上面的注解功能是一样的,都可以创建Bean实例,但是建议在对应的层使用对应的注解。

实现

  1. 引入aop依赖spring-aop-5.2.6.RELEASE
  2. 开启组件扫描
    1. 先在配置文件中添加context
    2. 然后开启组件扫描<context:component-scan base-package="com.boerk"/>
    3. 在类上加上注解@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
posted @ 2022-01-12 22:06  Boerk  阅读(29)  评论(0)    收藏  举报