[TOC]java
在类定义、方法定义、成员变量定义前使用,格式:@注解标记名spring
理解与回顾: 使用Spring IOC 管理对象(定义bean、bean的控制(scope/init-method等属性))及对象关系(DI: set注入/构造器注入)。 控制反转:改变了对象获取方式。 new方式获取 --> spring容器建立对象以后注入进来使用。下降了耦合。ui
###1. 组件自动扫描 指定包路径,将包下全部组件进行扫描,组件类定义前有注解标记则会扫描到Spring容器。this
基于注解的组件扫描方式:spa
spring.xml ... <context:component-scan base-package="org.***" /> ...
@Component("idName") //扫描ExampleBean 组件,默认id=exampleBean //@ComponentScan // 注解方式开启组件扫描 @Scope("singleton") // 等价于<bean scope="">,默认单例。 public class ExampleBean { @PostConstruct //等价于<bean init-method="" > public void init() { System.out.println("初始化逻辑"); } @PreDestroy // 等价于<bean destroy-method="" > public void destroy() { System.out.println("释放资源,释放spring容器对象资源,触发单例对象的destroy-method"); } public void excute() { System.out.println("do sth"); } }
@Resource:由JDK提供,能够定义在变量前或者setXXX方法前。code
@Autowired:由Spring提供,能够定义在变量前或者setXXX方法前。 两者均可以实现注入,不存在多个匹配类型,使用Resource和Autowired均可以。 若是存在多个匹配类型,能够按名称注入: @Resource(name="指定名称") 或 @Autowired @Qualifier("指定名称")component
举例:xml
@Component public class Student { //须要调用Computer和Phone对象 @Autowired private Computer c; //注入Computer对象 //使用注解set方法也可省略,xml的配置方式不能省略(set注入方式) //public void setC{ // this.c = c; //} @Autowired(required=false) // 设置required属性为false,会尝试自动注入,若没有匹配的bean,则未注入,p仍为null。 //@Qualifier("p") //指定名称注入 private Phone p; //注入Phone对象 ... }
username=root password=123456
spring.xml对象
<util:properties id="db" location="classath:xxx.properties"> </util:properties>
三种配置方案:1. xml中显示配置; 2. java中显示配置; 3. 组件扫描,自动注入。资源
本身写的组件用简洁的**注解方式自动注入(装配)**便可; 第三方组件没法在其类上添加@Component和@AutoWired注解,必须用XML或JavaConfig 显式配置。 总之,以注入方式成全对象依赖关系,实现了组件解耦。