注解是现在框架流行的开发方式,不同于老式开发方式省略了很多代码
Spring的注解开发模式同样也非常方便。
以下先讲一讲蛋糕式编程,方便记着学的人快速入门
- 在spring4之后,想要使用注解形式,必须得要引入aop的包
- 在配置文件当中,还得要引入一个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约束
- 配置组件扫描,告诉Spring哪个包下的类型使用组合扫描
<context:component-scan base-package="[包名]"/>
- 开始使用
@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的配置
- @Component
修改一个类,将这个类交给Spring管理 相当于在配置文件当中配置<bean id="" class="">
@Component三个衍生注解
为了更好的进行分层,Spring可以使用其它三个注解, 目前使用哪一个功能都一样 , 后期可能会添加一些属于各自的属性- @Controller
web层 - @Service
service层 - @Repository
dao层
- @Controller
- 属性注入
- @Value
就和上述例子一样,普普通通地注入 - @Autowired
就是引用类型注入,不同的是不同id了:
其中'A'就是另一个SpringBean的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>
但是在注解开发中:
当然你也可以附上id来注入:用@Qualifier("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; }
可以发现用了@Qualifier依然要@Autowired 可以说是非常的智障了,感受下就好,就不要再用了(太傻了)@Component("user") public class User { @Value("EZeta") //直接属性注入,不用set方法 private String name; @Autowired @Qualifier("pet") private Pet pet; }
但如果真的需要id来注入怎么办,有更好的(记这个:@Resource,别用@Qualifier)
注意,参数是name="值"@Component("user") public class User { @Value("EZeta") //直接属性注入,不用set方法 private String name; @Resource(name="pet") private Pet pet; }
- @Value
- 初始化方法和销毁方法
对应:<bean id="" class="" init-method="[methodname]" destroy-method="[methodname]"> </bean>
- @PostConstruct
初始化方法 - @PreDestroy
销毁方法
直接把注解打到对应方法上面就好
- @PostConstruct
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,注解完成属性注入。