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. [转]ubuntu11.04配置nfs--解决mount.nfs: access denied问题

    总算通过了nfs的localhost测试. 配置很简单,下面摘自网络,并且整理下: 1 安装nfs #apt-get install nfs-kernel-server #apt-get instal ...

  2. HTTP-Runoob:HTPP消息结构

    ylbtech-HTTP-Runoob:HTPP消息结构 1.返回顶部 1. HTTP 消息结构 HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响 ...

  3. AngularJS:输入验证

    ylbtech-AngularJS:输入验证 1.返回顶部 1. AngularJS 输入验证 AngularJS 表单和控件可以验证输入的数据. 输入验证 在前面的几个章节中,你已经学到关于 Ang ...

  4. 侯捷STL学习(一)--顺序容器测试

    开始跟着<STL源码剖析>的作者侯捷真人视频,学习STL,了解STL背后的真实故事! 视频链接:侯捷STL 还有很大其他视频需要的留言 第一节:STL版本和重要资源 STL和标准库的区别 ...

  5. C Primer Plus学习笔记(三)- 字符串和格式化输入/输出

    从一个简单的例子开始 #include <stdio.h> int main() { char name[10]; printf("Input Your Name:\n" ...

  6. 数组可以直接转换为DataRow

    string[] cc=new string[3]{...}; Dt.Rows.Add(cc);

  7. IEEE 2012 PHM数据挑战赛

    Sutrisno E, Oh H, Vasan A S S, et al. Estimation of remaining useful life of ball bearings using dat ...

  8. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 85

    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 85;import sys reload(sys) sys.s ...

  9. 12-21C#电脑蓝屏效果(可以恶搞整人哦)、输入输出流(StreamReader/streamWriter)

    一.winform电脑蓝屏效果 第一种方法:基本操作: 第一步:创建一个新的C#窗体“Form1”: 第二步:在设计窗口中,更改其属性: 1)text属性:将form1的text属性中的文字取消掉,然 ...

  10. a标签中href=""的几种用法(转)

    a标签中href=""的几种用法   标签: html / a标签 / javascript 46371 众所周知,a标签的最重要功能是实现超链接和锚点.而且,大多数人认为a标签最 ...