近来发现把写博客当成任务了。呵呵,调整下了下心态:我在这里写,只是希望你看到,能有所帮助。
spring注解的发展史
在spring2.5的官方指导里指出,spring从2.0开始引入了一些用于配置的annotation, 包括 @Transactional, @Required and @PersistenceContext/@PersistenceUnit.
然而我在一篇文章里,看到spring注解从1.2开始便有了,于是我不得不回头去查阅了下spring相关文档。得出如下结论:
1. spring1.0: 从1.0开始就在对元数据问题出谋划策,没有正式引入注解。但有了SOURCE级别的元数据支持
2. spring1.2: 在1.2的时候是java1.5的发布,并且面对要兼容1.3,1.4版本的问题,但已经有了基于java5.0的注解如: @ManagedResource,基本无关注。 aspectJ 在该版本中仍在建设过程中,还停留在aspect。
3. spring2.0 :有了比较多的注解,包括AspectJ已经采用了注解方法,并且支持xml配置
4. spring2.5: 引入了用于配置的完整的Annotation集合: @Autowired,以及对JSR-250注解@Resource, @PostConstruct and @PreDestroy的支持
5. spring3.0: 注解已经非常的丰富,spring的 JavaConfig项目已经加入到spring框架中,这意味着将直接支持如@Configuration,@Bean,@Value等标签
6. spring3.1: 对@Configuration有所增强,充实。
认识注解:
我相信大家接触注解(annotation),最早应该是@Override,@Deprecated,@Suppress Warnings,就算接触不多,也没关系,我这里尽量系统的说一遍。
1. 注解:也被叫做 元数据(其实我觉得更是元数据的一种表现形式),为代码添加信息提供了一种形式化的方法,在稍后的某个时候用到这些数据
2. 元数据: 用于描述数据的数据(MetaDate),翻译成信息的信息会跟更好理解,举例来说:我这边文章就是一些数据,或者信息,而对这个文章的标题,时间,香港空间,关键字,都可以称为元数据
3. 注解是元数据与源代码结合在一起,但不保存在外部文档(如xml)的趋势下催生的
阴暗的说,其实你知道上面这些也没大用,反正能写能用就成,下面介绍注解的格式
注解的格式
注意: 注解本身不做任何事
注解可以与其他任何修饰符共同作用于方法,例如public,static或者void。从语法角度看,注解的使用方式与修饰符使用几乎一模一样。
为何说几乎,举例:
有方法:
public void create(int i){}
和 注解
@Test, @Test1
可以如下写法:
1.
@Test publicvoidcreate(inti){}
2.
public@Testvoidcreate(inti){}@Testpublicvoidcreate(inti){} //注意不能放在void的后面
3.
publicvoidcreate(@Testinti){}
4.
java中自定义一个注解和应用:
只举一个简单例子,算是入门。但对你理解spring注解将会是个不错的过渡,至少你能感觉到,注解原来这么简单。
例子:
建立一个类TestScholar 来应用@Scholar
代码:
效果图:
通过上面的例子,对注解算是有些认识。注意:1. @Target如果你是第一次接触,不要急,下面有讲解2. 你需要注意 注解的方式很像接口,字段定义需要加小括号3. 注解可以有缺省,如果缺省(default),则可以不赋值
元注解
记得元数据的解释吗?是的,元注解专职负责注解其他注解
元注解
参数
说明
@Target
表示注解可用于什么地方
CONSTRUCTOR构造器的声明
FIELD域声明(包括enum实例)
LOCAL_VARIABLE局部变量声明
METHOD方法声明
PACKAGE包声明
PARAMETER参数声明
TYPE类,接口(包括注解)或者enum声明
@Retention
表示需要什么级别保存该注解信息
SOURCE注解将被编译器丢弃
CLASS注解在class文件中可用,会被VM丢弃
RUNTIMEVM在运行期被保留,可以通过反射机制读取注解
@Documented
将此注解包含在Javadoc中
@Inherited
允许子类集成父类中的注解
注解类型
所有基本类型(int,float,boolean等)StringClassenumAnnotation以上类型的数组
读取注解的内容:
通过反射机制,都会有getAnnotation()方法
如方法(Method)的:
如果是初学,可能要去专门学习下,呵呵,这里只是为了给spring做个入门。
spring2.5 注解
spring2.5算是一个里程碑的版本,而注解2个比较大的改革便是:1. Annotation驱动的bean配置2. 对Spring MVC的支持
分别讲解一下:
1.Annotation驱动的bean配置
1.1 基于注解(Annotation-based)的配置
要使注解可用,您必须使用 Java 5 (Tiger)或更新的版本,以使得可以访问源代码层次的注解。这些注解可以被注册为独立 bean 的定义,但它们也可以被隐式地注册,通过基于 XML 的配置方式,香港虚拟主机,如下例(请注意包含 ‘context’ 命名空间):
1.2 @Autowired
引用些官方例子:
1)@Autowired 注解可以用于“传统的”setter 方法,如下例:
2)这个注解也可以用于以属性为参数/多个参数的方法
3)@Autowired注解甚至可以用于构造器与字段:
4)也可以一种提供来自ApplicationContext的特殊类型的所有 beans,注解字段或者方法,例如:
5)这同样适用于集合类型:
注意:在缺省情况下,当出现0个候选的 beans时自动连接将失败;缺省行为把连接方法,构造器,字段假设为 required 的依赖。这样的行为如下所示:
1.3 基于注解的微调
1)有多个实例,需要筛选出一个,可以通过Qualifier注解
2)@Qualifier注解也能够被指定为构造器的参数或者方法的参数:
2.对Spring MVC的支持
Spring 2.5 为MVC 控制器引入了一种基于Annotation(注解)的编程模型, 使用@RequestMapping, @RequestParam, @ModelAttribute等等注解。
1.要实现控制器@Controller自动探测
加入配置
2.一个实例
少一点预设的期待,那份对人的关怀会更自在