Spring5学习随笔-基础注解编程

打印 上一主题 下一主题

主题 926|帖子 926|积分 2778

学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】
注解编程-第一章、注解基础概念

1.什么是注解编程

指的是在类或方法上加入特定的注解(@XXX),完成特定功能的开发.
2.为什么要讲解注解编程


  • 注解开发方便
    代码简介 开发速度大大提高
  • Spring开发潮流
    Spring2.x引入注解  Spring3.x完善注解 SpringBoot普及 推广注解编程
3.注解的作用


  • 替换XML这种配置形式,简化配置

    @Component 代替/等效配置中的bean对象
  • 替换接口,实现调用双方的契约性
通过注解的方式,在调用者和功能提供者之间达成约定,进而进行功能的调用,因为注解应用更为方便灵活,所以在现在的开发中,更推荐通过注解的形式完成

4.Spring注解的发展历程


  • Spring2.x开始支持注解编程 @Component @Service @Scope
    目的:提供这些注解只是为了在某些情况简化XML的配置,作为XML开发的有益补充
  • Spring3.x @Configuration @Bean
    目的:彻底替换XML,基于纯注解编程
  • Spring4.x SpringBoot
    提倡使用注解常见开发
5.Spring注解开发的一个问题

Spring基于注解进行配置后,还能否解耦合呢?
在Spring框架应用注解时,如果对注解配置的内容不满意,可以通过Spring配置文件进行覆盖。
第二章、Spring的基础注解(Spring2.x)

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


  • 搭建开发环境
  1. <context:component-scan base-package="com.baizhi"/>
  2. 作用:让Spring框架在设置的包下扫描对应的注解,使其生效
复制代码

  • 对象创建相关注解

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

    @Component 代替/等效配置中的bean对象

    • @Component细节
      如何显示指定工厂创建对象的id值
      @Component("u”) 参数可以设置id值

      • Spring配置文件覆盖注解配置内容
        1. applicationContext.xml
        2. <bean id="u" />
        复制代码

    • @Component的衍生注解
      1. @Repository 应用在DAO类型
      2. @Service    应用在Service类
      3. @Controller 应用在Controller类
      4. **注意:本质上这些衍生注解就是@Component 作用、细节、用法都是完全一致
      5. 目的:更加准确的表达一个类型的作用
      6. 注意:Spring整合Mybatis开发过程中 不使用@Repository @Component**
      复制代码

  • @Scope注解
    作用:控制简单对象创建次数 等同于scope属性
    注意:不添加@Scope,Spring还是会提供默认值singleton
    1. [/code]
    2. [*]@Lazy注解
    3. 作用:延迟创建单实例对象
    4. 注意:一旦使用了@Lazy注解后,Spring会在使用这个对象的时候,才进行对象的创建
    5. [code]
    复制代码
  • 生命周期方法相关注解

    • 初始化相关方法  @PostConstruct
    • 销毁方法  @PreDestroy
    注意:1.上述的2个注解并不是Spring提供的,是JSR(JavaEE规范)520提供的
    1. **2.再一次的验证,通过注解实现了接口的契约性**
    复制代码
2.注入相关注解


  • 用户自定义类型注入 @Autowired

    @AutoWired细节

    • Autowired注解基于类型进行注入[推荐]
      基于类型的注入:注入对象的类型,必须与目标成员变量类型相同或者是其子类(实现类)
    • Autowired加上Qualifier  可以基于名字进行注入[了解即可]
      注入对象id值,必须与Qualifier注解中设置的名字相同
    • Autowired注解放置位置

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

    • JavaEE规范中提供类似功能的注解
      JSR250 @Resouce(name=”userDAOImpl”) 基于名字进行注入
      注意:应用Resource注解时,名字没有配置成功,那么他会继续按照类型进行注入
      JSR330  @Inject 作用 @Autowired完全一致  基于类型进入注入  —→EJB3.0

  • JDK类型
    @Value注解完成

    • 设置xxx.properties
      id = 10
      name = suns
    • Spring的工厂读取这个配置文件

    • 代码
      属性 @Value("${key}”)


    • @PropertySource

      • 作用:用于替换Spring配置文件中的标签
      • 开发步骤

        • 设置xxx.properties
          id=10
          name=suns
        • 应用@PropertySource
        • 代码
          属性@Value()



  1. @Component
  2. @PropertySource("classpath:/init.properties")
  3. public class Category {
  4.     @Value("${id}")
  5.     private Integer id;
  6.     @Value("${name}")
  7.     private String name;
  8.     public Integer getId() {
  9.         return id;
  10.     }
  11.     public void setId(Integer id) {
  12.         this.id = id;
  13.     }
  14.     public String getName() {
  15.         return name;
  16.     }
  17.     public void setName(String name) {
  18.         this.name = name;
  19.     }
  20. }
复制代码

  • @Value注解细节

    • @Value注解不能给静态成员变量赋值
    • @Value注解+Properties这种方式,不能注入集合类型

      • Spring提供新的配置形式 YAML YML(SpringBoot)


3.注解扫描详解
  1. <context:component-scan base-package="com.baizhi"/>
  2. 当前包 及其 子包
复制代码
1.排除方式
  1. <context:component-scan base-package="com.baizhi">
  2.                 <context:exclude-filter **type**="" expression=""/>
  3.                 **type参数讲解**:assignable:排除特定的类型 不进行扫描
  4.                                                                         annotation:排除特定的注解  不进行扫描
  5.                                                                         aspectj:切入点表达式
  6.                                                                                                                 包切入点:com.baizhi.bean..*
  7.                                                                                                                 类切入点:*.User
  8.                                                                         regex:正则表达式来进行排除
  9.                                                                         custom:自定义排除策略
  10. </context:component>
  11. 排除策略可以叠加使用
  12. <context:component-scan base-package="com.baizhi">
  13.         <context:exclude-filter type="assignable" expression="com.baizhi.bean.User"/>
  14.         <context:exclude-filter type="aspectj" expression="com.baizhi.injection..*"/>
  15. </context:component-scan>
复制代码
实际开发中常用assignable、annotation、 aspectj(用的最多,切入点表达式)更方便
2.包含方式

和排除方式是相反的,它决定了哪些类的注解被Spring扫描
  1. <context:component-scan base-package="com.baizhi" use-default-filters="false">
  2.       <context:include-filter type="" expression=""/>
  3. </context:component-scan>
  4. 1. use-default-filters="false"
  5.         作用:让Spring默认的注解扫描方式 失效
  6. 2. <context:include-filter type="" expression=""/>
  7.         作用:指定扫描那些注解
  8.         type:assignable:指定特定的类型 不进行扫描
  9.                                 annotation:指定特定的注解  不进行扫描
  10.                                 aspectj:切入点表达式
  11.                                                                         包切入点:com.baizhi.bean..*
  12.                                                                         类切入点:*.User
  13.                                 regex:正则表达式来进行排除
  14.                                 custom:
  15. 包含的方式支持叠加
  16. <context:component-scan base-package="com.baizhi" use-default-filters="false">
  17.         <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
  18.         <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
  19.     </context:component-scan>
复制代码
4.对于注解开发的思考

<ul>配置互通
Spring注解配置 配置文件的配置 互通
[code]@Repositorypublic class UserDAOImpl{}public class UserServiceImpl{                private UserDAO userDAO;                set get..}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表