首页 > 代码库 > SpringIOC----注解
SpringIOC----注解
利用注解配置应用IOC
IOC:以注入方式应用对象,事项组件解耦
注解是在jdk5.0时追加一些新特性
注解:在类定义,方法定义,成员变量定义前面使用,格式为@注解标记名(取代bean配置)
1) 组件自动扫描
可以按指定的包路径,将包下所以组件扫描,如果发现组件类定义前有以下标记,会将组建扫描到Spring容器。
@Component:其他组件
@Controller:控制层组件
@Service:业务层组件XXXService
@Responsitory:数据访问层组件XXXDao
@Named(需要引入第三方标准包)
@Scope:控制对象创建,默认单例
@PostConstruct:指定init-method
@PreDestroy指定destroy-method
实例如下:
(1)在applicationContext.xml中开启组建扫描
注意:base-package属性指定包名路径
如下:
<!--开启组件扫描--> <context:component-scan base-package="org.tarean.bean"/>
(2)在相关类上进行注解标记(将该组建扫描到Spring容器中):@component默认ID为首字母小写,形如 id=exampleBean
如下:
@Component //扫描 ExampleBean 组件,默认id=exampleBean public class ExampleBean{ public void execute(){ System.out.println("执行execute处理方式"); } }
注意:可以自己指定id 名,Scope ,init ,destroy等
如下:
@Component("examl") //指定id=examl public class ExampleBean1{ public void execute(){ System.out.println("------------"); } }
@Component @Scope("prototype")//等价于<bean scope="prototype"> public class ExampleBean{ public void execute(){ System.out.println("执行execute处理方法"); } @PostConstruct//等价于<bean init-method="true"> public void init(){ System.out.println("初始化逻辑"); } @PreDestroy//等价于<bean destroy-method="true"> public void destroy(){ System.out.println("释放资源"); } }
注意:注解没有 ”推迟” 标记
注入注解:
@Resource:可以在变量定义之前或setXX方法前应用
@Autowired(按类型):可以在变量定义之前或setXX方法前应用
一般使用时,@Resource和@Autowired功能等价,都可以实现注入
如果不存在多个匹配类型,使用@Resource或@Autowired都可以。
如果存在多个匹配类型,建议按名称注入@Resource(name=”指定名称”)---set注入
或@Autowired @Qualifier(“p”)---构造器注入【强制按名称】
实例:set注入
public class student{ //需要调用computer和phone @Resource private Computer c; public void setC(Computer c){ this.c=c; } @Resource private Phone p; public void setP(Phone p){ this.p=p; } }
提示:关于SpringIOC应用:自己编写的组件建议使用注解配置,框架API只能使用XML配置
表达式注入:
(1)直接在xml中注入参数值
在applicationContext.xml中信息注入
<!-- 将MyDatasource扫描到Spring容器 --> <context:component-scan base-package="com.home"/> <!-- Spring创建一个Properties对象 然后利用@Value表达式注入,将Properties对象信息给MyDataSource注入--> <util:properties id="db"> <prop key="username">root</prop> <prop key="pawwsord">1234</prop> <prop key="driver">com.mysql.jbdc.Driver</prop> <prop key="url">jdbc:mysql:///test</prop> </util:properties>
在相关类中添加注解
package com.home.entity; @Component("ds") public class MyDataSource { @value("#{db.username}")//将db对象username值注入 private String username; @value("#{db.password}")//将db对象password值注入 private String password; @value("#{db.driver}")//将db对象driver值注入 private String driver; @value("#{db.url}")//将db对象url值注入 private String url; public void getConnection(){ //利用链接参数创建数据库连接 System.out.println(uername+","+password+","+driver+","+url); } }
(2)读取Properties文件中的参数方式
创建mydb.properties
username=root
password=1234
driver=com.mysql.jbdc.Driver
url=jdbc:mysql:///test
在xml文件中获取properties文件
<util:properties id="db" location="classpath:mydb.properties"> </util:properties>
在相关类中添加注解
@Component("ds") public class MyDataSource { @value("#{db.username}")//将db对象username值注入 private String username; @value("#{db.password}")//将db对象password值注入 private String password; @value("#{db.driver}")//将db对象driver值注入 private String driver; @value("#{db.url}")//将db对象url值注入 private String url; public void getConnection(){ //利用链接参数创建数据库连接 System.out.println(uername+","+password+","+driver+","+url); } }
SpringIOC----注解