zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    [TCP/IP]TCP的三次握手和四次挥手

    思考
    jQuery完整的事件委托(on())
    jQuery队列动画
    jQuery自定义动画
    jQuery淡入淡出
    jQuery滑动动画
    jQuery基本动画
    jQuery基础3
  • 原文地址:https://www.cnblogs.com/peachwang/p/7287209.html
Copyright © 2011-2022 走看看