首页 > 代码库 > 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----注解