什么是注解编程?

前言

孙哥的spring讲解,这一段感觉非常奈斯给大家分享一下

1. 什么是注解编程
指的是在类或者方法上加入特定的注解(@XXX),完成特定功能的开发。
  
	@Component
public class XXX{}
2. 为什么要讲解注解编程
1. 注解开发方便
     代码简洁 开发速度大大提高
2. Spring开发潮流
     Spring2.x引入注解  Spring3.x完善注解 SpringBoot普及 推广注解编程 
3. 注解的作用
  • 替换XML这种配置形式,简化配置
    在这里插入图片描述

  • 替换接口,实现调用双方的契约性

    通过注解的方式,在功能调用者和功能提供者之间达成约定,进而进行功能的调用。因为注解应用更为方便灵活,所以在现在的开发中,更推荐通过注解的形式,完成
    

在这里插入图片描述

4. Spring注解的发展历程
1. Spring2.x开始支持注解编程 @Component @Service @Scope..
     目的:提供的这些注解只是为了在某些情况下简化XML的配置,作为XML开发的有益补充。
2. Spring3.x @Configuration @Bean..
     目的:彻底替换XML,基于纯注解编程
3. Spring4.x SpringBoot 
     提倡使用注解常见开发
5. Spring注解开发的一个问题
Spring基于注解进行配置后,还能否解耦合呢?

在Spring框架应用注解时,如果对注解配置的内容不满意,可以通过Spring配置文件进行覆盖的。

Spring的基础注解(Spring2.x)

这个阶段的注解,仅仅是简化XML的配置,并不能完全替代XML
1. 对象创建相关注解
  • 搭建开发环境

    <context:component-scan base-package="com.baizhiedu"/>
    
    作用:让Spring框架在设置包及其子包中扫描对应的注解,使其生效。
    
  • 对象创建相关注解

    • @Component

      作用:替换原有spring配置文件中的<bean标签 
      注意:
          id属性 component注解 提供了默认的设置方式  首单词首字母小写
          class属性 通过反射获得class内容 
      

在这里插入图片描述

  • @Component 细节

    • 如何显示指定工厂创建对象的id值

      @Component("u")
      
  • Spring配置文件覆盖注解配置内容

    applicationContext.xml
    
    <bean id="u" class="com.baizhiedu.bean.User"/>
    
    id值 class的值 要和 注解中的设置保持一值 
    
  • @Component的衍生注解

    @Repository  --->  XXXDAO
      @Repository
      public class UserDAO{
      
      }
    @Service
      @Service
      public class UserService{
      
      }
    @Controller 
      @Controller 
      public class RegAction{
      
      }
    注意:本质上这些衍生注解就是@Component 
         作用 <bean  
         细节 @Service("s")
    
    目的:更加准确的表达一个类型的作用
    
    注意:Spring整合Mybatis开发过程中 不使用@Repository @Component
         
    
  • @Scope注解

    作用:控制简单对象创建次数
    注意:不添加@Scope Spring提供默认值 singleton
    <bean id="" class="" scope="singleton|prototype"/>
    
  • @Lazy注解

    作用:延迟创建单实例对象
    注意:一旦使用了@Lazy注解后,Spring会在使用这个对象时候,进行这个对象的创建
    <bean id="" class="" lazy="false"/>
    
  • 生命周期方法相关注解

    1. 初始化相关方法 @PostConstruct
       InitializingBean
       <bean init-method=""/>
    2. 销毁方法 @PreDestroy
       DisposableBean
       <bean destory-method=""/>
    注意:1. 上述的2个注解并不是Spring提供的,JSR(JavaEE规范)
         2. 再一次的验证,通过注解实现了接口的契约性
    
2. 注入相关注解
  • 用户自定义类型 @Autowired

在这里插入图片描述

@Autowired细节
1. Autowired注解基于类型进行注入 [推荐]
   基于类型的注入:注入对象的类型,必须与目标成员变量类型相同或者是其子类(实现类)

2. Autowired Qualifier 基于名字进行注入 [了解]
   基于名字的注入:注入对象的id值,必须与Qualifier注解中设置的名字相同

3. Autowired注解放置位置 
    a) 放置在对应成员变量的set方法上 
    b) 直接把这个注解放置在成员变量之上,Spring通过反射直接对成员变量进行注入(赋值)[推荐]

4. JavaEE规范中类似功能的注解
    JSR250 @Resouce(name="userDAOImpl") 基于名字进行注入
           @Autowired()
           @Qualifier("userDAOImpl")
           注意:如果在应用Resource注解时,名字没有配对成功,那么他会继续按照类型进行注入。
    JSR330 @Inject 作用 @Autowired完全一致 基于类型进行注入 ---》 EJB3.0
          <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
          </dependency>
  • JDK类型

    @Value注解完成
    1. 设置xxx.properties 
       id = 10
       name = suns
    2. Spring的工厂读取这个配置文件 
       <context:property-placeholder location=""/>
    3. 代码 
       属性 @Value("${key}")
    
    • @PropertySource

      1. 作用:用于替换Spring配置文件中的<context:property-placeholder location=""/>标签
      2. 开发步骤 
          1. 设置xxx.properties 
             id = 10
             name = suns
          2. 应用@PropertySource
          3. 代码
             属性 @Value()
      
    • @Value注解使用细节

      • @Value注解不能应用在静态成员变量上

        如果应用,赋值(注入)失败
        
      • @Value注解+Properties这种方式,不能注入集合类型

        Spring提供新的配置形式 YAML YML (SpringBoot)
        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忆梦九洲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值