顾新湖的个人学习笔记之Spring —— 七、IOC 操作 Bean 管理 (基于注解)

本文详细介绍了Spring中基于注解的IOC Bean管理,包括注解的定义、组件扫描、@Component系列注解、属性注入如@Autowired、@Resource和@Value,以及初始化和销毁注解@PostConstruct和@PreDestroy。此外,还讨论了@Lazy、@Scope等其他关键注解的作用。
摘要由CSDN通过智能技术生成

IOC 操作 Bean 管理 (基于注解)

1、什么是注解

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

2、组件扫描

  1. Spring能够从指定的classpath下自动扫描,侦测和实例化具有特定注解的bean

  2. 方法一 xml形式

    <!-- 
    	1 component 组件
    	2 scan 扫描
    	3 base-package = "包名"
    	如果扫描多个包,可以用逗号隔开
    	可以扫描 包上层路径
    -->
    <context:component-scan base-package=""></context:component-scan>
    
  3. 方法二 config类 —— 以类的形式实现组件扫描 SpringConfig.class

    @Configuration
    @ComponentScan(basePackages = {"com.xin"})
    public class SpringConfig {
    }
    

    class TestBean

    public class Test {
        @org.junit.Test
        public void TestBean_01() {
            // AnnotationConfigApplicationContext 寻找config类 —— 以类的形式实现组件扫描 
            ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
            UserXinImpl userXinImpl = context.getBean("userXinImpl", UserXinImpl.class);
            System.out.println(userXinImpl.toString());
    
        }
    }
    

3、Spring 针对 Bean 管理中创建对象提供注解

​ 4个注解功能一样,都可以来创建 bean实例

  1. @Component —— 普通的注解
  2. @Service —— service层
  3. @Controller —— web层
  4. @Repository —— dao层

4、Spring 注解注入属性

  1. @Autowired —— 根据属性类型进行自动装配

  2. @Qualifier —— 根据属性名进行注入,必须同 @Autowired 一起使用

    Autowired默认先按byType,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。
    1.可以手动指定按byName方式注入,使用@Qualifier//通过此注解完成从spring配置文件中 查找满足Fruit的bean,然后按//@Qualifier指定pean
    @Autowired
    @Qualifier(“pean”)
    public Fruit fruit;
    2.如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) 
    public Fruit fruit;
    
  3. @Resource —— 根据属性类型、属性名进行注入,默认属性名

    默认按 byName自动注入,如果找不到再按byType找bean,如果还是找不到则抛异常,无论按byName还是byType如果找到多个,则抛异常。
    @Resource(name="" tpye="")
    可以手动指定bean,它有2个属性分别是name和type,使用name属性,则使用byName的自动注入,而使用type属性时则使用byType自动注入。
    这个注解是属于J2EE的,减少了与spring的耦合。
    

    ————————以上为 对象属性注入

  4. @Value —— 基本类型 属性的注入

    // @Value 可以引入 properties 格式文件中的数据
    @Value(“${wx_appid})
    public String name;
    
注意:
  • @Autowired,@Qualifier 是Spring的注解
  • @Resource是javax.annotation注解,而是来自于JSR-250,J2EE提供

5、其他注解

  1. @PostConstruct 和 @PreDestory

    实现初始化和销毁bean之前进行的操作

    • @PostConstruct:在构造方法和init方法(如果有的话)之间得到调用,且只会执行一次。

    • @PreDestory:注解的方法在destory()方法调用后得到执行。

      public class TestService { 
      
          @PostConstruct  
          public void  init(){  
              System.out.println("初始化");  
          }  
      
          @PreDestroy  
          public void  dostory(){  
              System.out.println("销毁");  
          }  
      }
      
  2. @Lazy(true)

    用于指定该Bean是否取消预初始化,用于注解类,延迟初始化。

  3. @Scope

    设置Spring容器如何新建Bean实例(方法上,得有@Bean)
    其设置类型包括:

    • Singleton (单例,一个Spring容器中只有一个bean实例,默认模式),
    • Protetype (每次调用新建一个bean),
    • Request (web项目中,给每个http request新建一个bean),
    • Session (web项目中,给每个http session新建一个bean),
    • GlobalSession(给每一个 global http session新建一个Bean实例)
  4. @Bean

    注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)

  5. @Configuration

    声明当前类为配置类,其中内部组合了@Component注解,表明这个类是一个bean(类上)

  6. @ComponentScan

    用于对Component进行扫描,相当于xml中的(类上)

  7. @WishlyConfiguration

    为@Configuration与@ComponentScan的组合注解,可以替代这两个注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值