Spring的注解开发模式

注解是现在框架流行的开发方式,不同于老式开发方式省略了很多代码
Spring的注解开发模式同样也非常方便。
以下先讲一讲蛋糕式编程,方便记着学的人快速入门

  1. 在spring4之后,想要使用注解形式,必须得要引入aop的包
  2. 在配置文件当中,还得要引入一个context约束
        <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd
             http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd">
           </beans>
    

最后两个就是context约束

  1. 配置组件扫描,告诉Spring哪个包下的类型使用组合扫描
       <context:component-scan base-package="[包名]"/>
    
  2. 开始使用
        @Component("user") //申明此类是Spring的一个类,bean会自动加入IOC中
          public class User {
             @Value("EZeta") //直接属性注入,不用set方法
             private String name;
             private Integer age;
             @Value("20") //如果提供了set方法,在set方法上添加@value("值");
             public void setAge(Integer age){
               this.age=age;
             }
          }
          
    
搞定!

接下来是注解开发详解

ps由于注解的各个功能都是和xml配置文件管理一一对应的,以下会与xml中的注入,bean配置等一一对应。至于xml怎么配置的,详见:DI三种注入方式Bean的配置

  1. @Component
    修改一个类,将这个类交给Spring管理 相当于在配置文件当中配置<bean id="" class="">
    @Component三个衍生注解
    为了更好的进行分层,Spring可以使用其它三个注解, 目前使用哪一个功能都一样 , 后期可能会添加一些属于各自的属性
    • @Controller
      web层
    • @Service
      service层
    • @Repository
      dao层
  2. 属性注入
    • @Value
      就和上述例子一样,普普通通地注入
    • @Autowired
      就是引用类型注入,不同的是不同id了:
       <bean id="XX" class="XXX.XXX.XX" p:name1="XXX" p:name2-ref="A"></bean>
       <bean id="XX" class="XXX.XXX.XX" p:name1="XXX" p:name2-ref="A"></bean>
      
      其中'A'就是另一个SpringBean的id,不论是普通注入还是命名空间注入都一样。
      但是在注解开发中:
      @Component("pet") //需要将其标记为Springbean不然不能作为别的类的字段进行引用注入
          public class Pet {
             @Value("666") ;
             private String name;
          }     
        @Component("user") 
          public class User {
             @Value("EZeta") //直接属性注入,不用set方法
             private String name;
             @Autowired  //将Springbean的引用注入,注意此处注解并没有参数,不需要将引用类的id传进去,Spring会在IOC中自动找到
             private Pet pet;
          }     
      
      当然你也可以附上id来注入:用@Qualifier("id")
        @Component("user") 
          public class User {
             @Value("EZeta") //直接属性注入,不用set方法
             private String name;
             @Autowired  
             @Qualifier("pet")
             private Pet pet;
          }     
      
      可以发现用了@Qualifier依然要@Autowired 可以说是非常的智障了,感受下就好,就不要再用了(太傻了)
      但如果真的需要id来注入怎么办,有更好的(记这个:@Resource,别用@Qualifier)
        @Component("user") 
          public class User {
             @Value("EZeta") //直接属性注入,不用set方法
             private String name;
             @Resource(name="pet")
             private Pet pet;
          }     
      
      注意,参数是name="值"
  3. 初始化方法和销毁方法
    对应:
    <bean id="" class="" init-method="[methodname]"  destroy-method="[methodname]">        </bean>
    
    • @PostConstruct
      初始化方法
    • @PreDestroy
      销毁方法
      直接把注解打到对应方法上面就好

XML与注解比较

  • XML可以适用任何场景 ,结构清晰,维护方便
  • 注解不是自己提供的类使用不了,开发简单方便
    比如jar包提供的类,你不可能修改人家源代码吧,对吧?

XML与注解整合开发

  • XML管理Bean
  • 注解完成属性注入
  • 使用过程中, 可以不用扫描,扫描是为了类上的注解
    在没有扫描的情况下, 使用属性注入的注解@Resource、 @Value 、@Autowired、@Qulifier:
       <!--不用扫描-->
       <!--  <context:component-scan base-package="[包名]"/>  -->
       <!--写这个就好-->
       <context:annotation-config/>
    

总结

注解是非常方便的方法,但是除非是自己一个人写项目,不然纯注解在合作上面很不方便,比如你写好了你的模块,别人在写ta的模块是要看一看你的bean构成,结果要去翻你的代码去看注解吗?显然不好,于是你在配置bean上用xml,DI就用注解。所有最好的开发方式就是:XML与注解整合开发,XML管理Bean,注解完成属性注入。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容