1、@Autowired

  • Autowired是用在JavaBean中的注解,通过byType形式,用来给指定的字段或方法注入所需的外部资源
  • Autowired注解来指定自动装配,可以修饰setter方法、普通方法、实例变量和构造器等
  • 当用来标注setter方法时,默认采用byType自动装配策略
@component
public class Chinese implments Person {
@Autowried
public void setAxe(Axe axe) {
this.axe = axe;
}
}
  • 修饰带多个参数的普通方法时,Spring会自动到容器中寻找类型匹配的Bean,如果恰好为每个参数都找到一个类型匹配的Bean,Spring会自动以这些Bean作为参数来调用该方法
@component
public class Chinese implments Person { @Autowried
public void setAxe(Axe axe, Dog dog) {
this.axe = axe;
this.dog = dog
}
...
}
  • 也可以用于修饰构造器和实例变量
  • 修饰一个实例变量时,Spring将会把容器中与该实例变量匹配的Bean设置为该实例变量的值
@component
public class Chinese implments Person {
@Autowried
private Axe axe;
@Autowried
public Chinese(Axe axe, Dog dog) {
this.axe = axe;
this.dog = dog
}
...
}
  • 也可以用于修饰数组类型的成员变量,Spring会自动搜索容器中的所有Axe实例,并以这些Axe实例作为数组元素来创建数组,最后将该数组付给axes
@Component
public class Chinese implements Person {
@Autowired
private Axe[] axes;
...
}
  • 与此类似的是,它也可以标注集合类型的实例变量,或者标注形参类型的集合方法,Spring对这种集合属性、集合形参的处理与上面对数组类型的处理是完全相同的
@Component
public class Chinese implements Person { private Set<Axe> axes;
@Autowired
public void setAxes(Set<Axe> axes) {
this.axes = axes;
}
...
}
  • 对于集合类型的参数而言,程序代码中必须是泛型,如上代码所示,程序指定了该方法的参数书Set类型,这表明Spring会自动搜索容器中的所有Axe实例,并将这些实例注入到axes实例变量中。如果程序没有使用泛型来指明集合元素的类型,则spring将会不知所措
public class BaseDaoImpl<T> implements BaseDaoImpl<T> {
public void save(T e) {
System.out.println("程序保存对象:" + e);
}
}

2、@Component

  • 标注一个普通的Spring Bean类

3、@Controller

  • 标注一个控制器组件类

4、@Service

  • 标注一个业务逻辑组件类

5、@Repository

  • 标注一个DAO组件类

6、@Scope

  • 指定Bean实例的作用域,默认是singleton,当采用零配置方式来管理Bean实例是,可使用@Scope Annotation,只要在该Annotation中提供作用域的名称即可

7、@Resource

  • 为目标Bean指定协作者Bean
@Component
public class Chinese implements Person {
private Axe axe; @Resource(name="stoneAxe")
public void setAxe(Axe axe) {
this.axe = axe;
}
}

8、@PostConstruct 和@PreDestroy

  • 定制声明周期行为
  • PostConstruct指定初始化行为
  • PreDestroy指定销毁行为

9、@DependsOn

  • 可以修饰Bean类或方法,使用时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean
@DependsOn({"steelAxe","abc"})
@Component
pulic class Chinese implements Person {
...
}

10、@Lazy

  • 修饰Spring Bean类用于指定该Bean的预初始化行为,使用时可以指定一个boolen类型的value值,该属性决定是否要预初始化该Bean
@Lazy(true)
@component
public class Chinese implements Person { }

11、@Qualifier

  • 允许根据Bean的id来执行自动装配
@Component
pulic class Chinese implements Person {
@Autowired
@Qualifier("steelAxe")
private Axe axe;
public void setAxe(Axe axe) {
this.axe = axe;
} public void useAxe() {
System.out.println(axe.chop());
}
}
  • 上面的注解指定了axe实例变量将使用自动装配,且精确指定了被装配的Bean实例名称是steelAxe
  • 如果使用@Autowired和@Quelifier实现精确的自动装配,还不如直接使用@Resource注解执行依赖注入

Spring core注解的更多相关文章

  1. spring @condition 注解

    spring @condition注解是用来在不同条件下注入不同实现的 demo如下: package com.foreveross.service.weixin.test.condition; im ...

  2. Spring JSR-250注解

    Java EE5中引入了“Java平台的公共注解(Common Annotations for the Java Platform)”,而且该公共注解从Java SE 6一开始就被包含其中. 2006 ...

  3. Spring _day02_IoC注解开发入门

    1.Spring IoC注解开发入门 1.1 注解开发案例: 创建项目所需要的jar,四个基本的包(beans core context expression ),以及两个日志记录的包,还要AOP的包 ...

  4. spring+mybatise注解实现

    spring+mybatise注解实现 spring.jpa.database=MYSQL spring.datasource.type=com.alibaba.druid.pool.DruidDat ...

  5. Spring的注解@Qualifier

    近期在捯饬spring的注解,现将遇到的问题记录下来,以供遇到同样问题的童鞋解决~ 先说明下场景,代码如下: 有如下接口: public interface EmployeeService { pub ...

  6. spring @Required注解

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/annotation-based-configuration/spring-required-ann ...

  7. Spring常用注解式开发

    1.组件注册@Configuration.@Bean给容器中注册组件. 注解,@Configuration告诉Spring这是一个配置类,相当于bean.xml配置文件. 注解,@Bean给Sprin ...

  8. Spring使用注解实现AOP

    一.AspectJ概述 AspectJ是一个面向切面的框架,它扩展了Java语言.定义了AOP语法,能够在编译期提供代码的织入,它提供了一个专门的编译期用来生成遵守字节编码规范的Class文件. @A ...

  9. spring基于注解的事务控制

    pom配置: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

随机推荐

  1. 使用Json Template在Azure China创建ARM类型的虚拟机

    前面几篇文章介绍过Azure的两种VM的模式,包括ASM和ARM.并且介绍了如何用Azure CLI和PowerShell创建虚拟机.本文将介绍如何采用Json的Template来创建基于ARM的VM ...

  2. java代码分解质因数

    总结: 循环...首位 逻辑要清晰 很简单.首先质因数最小的2.因为1不是质数 然后当输入的数刚好为2时,结束.不用下一步了.否则在循环里不停的输出一个数, 当输入的数比2大时,分能被2整除和不能被2 ...

  3. L2-005. 集合相似度(set使用)

    L2-005. 集合相似度 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定两个整数集合,它们的相似度定义为:Nc/Nt*1 ...

  4. js防止重复点击

    表单元素 disabled 没有之一. el.prop('disabled', true); ajax({}).done(function() { el.prop('disabled', false) ...

  5. Vue指令学习

    # new Vue({ vue所有的数据都是放到data里面的 # data:{ vue对象的数据 # a:1,对象 # b:[] , # } # methods:{vue对象的方法 # dosomt ...

  6. CSS——盒子模型

    一.盒子模型: 模型如下: 如图:盒子模型包括:margin.padding.border.content四部分. margin:外边距,透明,能够显示父级的背景颜色等.表示元素与元素之间的间隔或者说 ...

  7. 部署和调优 2.5 tomcat配置和优化

    配置文件 vim /usr/local/tomcat/conf/server.xml 修改 <Connector port=" protocol="HTTP/1.1" ...

  8. CSS3 高级属性

    尽管现代浏览器已经支持了众多的CSS3属性,但是大部分设计师和开发人员貌似依然在关注于一些很“主流”的属性,如border-radius.box-shadow或者transform等.它们有良好的文档 ...

  9. rm 删除文件或目录

    rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉.对于链接文件,只是删除整个链接文件,而原有文件保持不变. 注意:使用rm命令要格外小心.因为一旦 ...

  10. 使用自定义线程池优化EchoServer

    在上一篇文章中http://www.cnblogs.com/gosaint/p/8494423.html 我自定义了线程池ThreadPool.现在在我的EchoServer中使用自定义线程池去负责和 ...