Spring3.0引入了纯注解开发的模式,框架的诞生是为了简化开发,那注解开发就是简化再简化。Spring的特性在整合MyBatis方面体现的淋漓尽致哦
以前跟老韩学习SE时他就说:
注解本质是一个继承了Annotation 的特殊接口,其具体实现类是Java 运行时生成的动态代理类。
而我们通过反射获取注解时,返回的是Java 运行时生成的动态代理对象$Proxy1。通过代理对象调用自定义注解(接口)的方法,会最终调用AnnotationInvocationHandler 的invoke 方法。该方法会从memberValues 这个Map 中索引出对应的值。而memberValues 的来源是Java 常量池。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
注解开发前,配置Bean时是在xml里将class分别写在Bean标签里,然后起id,就像这样
<bean id="a" class="yu7daily.Dao.Daoimpl.A" />
注解开发后,配置Bean时首先将xml里的<Bean>标签删掉,然后在类上添加@Component注解即可
@Component("a")
public class A implements AA {
public void save() {
System.out.println("book dao save ..." );
}
}
在xml文件中来写一个扫描包的注解标签,对象就装进IOC容器里了
<context:component-scan base-package="yu7daily.Dao"/>
component-scan:component意为组件,scan意为扫描包路径越多,扫描的范围越小速度越快·包路径越少,扫描的范围越大速度越慢
最后直接从容器获取对象
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
A aa = (A) ctx.getBean("a");
bookService.save();
}
这里要注意的是:由于接口无法创建对象,所以别把注解写在接口上!!
注解真是神奇啊,他和原先的xml里的Bean到底是什么关系呢?