• 基于注解的方式管理Bean


    --------------------siwuxie095

       

       

       

       

       

       

       

       

    基于注解的方式管理 Bean

       

       

    (一)准备

       

       

    1注解,可以理解为代码中的特殊标记,使用注解可以帮助完成功能

       

       

       

    2、注解写法:@注解名称(属性名称="属性值")

       

       

       

    3、注解可以使用在上面、方法上面、属性上面

       

       

       

    4、注解可以替代配置文件来管理 Bean,但不可能完全脱离配置

    文件,仍然需要在配置文件中做少许配置

       

       

       

    5、创建 Spring 配置文件,并引入 XML 约束

       

    spring-beans-4.3.xsd spring-context-4.3.xsd

       

    注意:要引入和 Spring 版本对应的 XML 约束

       

       

    applicationContext.xml 中添加如下约束:

       

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="

    http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context.xsd">

       

       

       

    6、在配置文件中开启注解扫描

       

    applicationContext.xml:

       

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="

    http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context.xsd">

       

    <!--

    Spring 注解开发除了要引入约束:

     

    http://www.springframework.org/schema/beans/spring-beans.xsd

     

    还要引入新的约束:

     

    http://www.springframework.org/schema/context/spring-context.xsd

    -->

       

       

    <!--

    开启注解扫描:到包中扫描类、方法、属性上面是否有注解

     

    base-package 属性:表示要扫描的包。如果有多个,以逗号隔开,

    缩短包路径,写成 com.siwuxie095,甚至写成 com

    -->

    <context:component-scan base-package="com.siwuxie095.anno"></context:component-scan>

     

     

    <!--

    只扫描属性上面是否有注解

     

    <context:annotation-config></context:annotation-config>

    -->

     

       

    </beans>

       

       

       

       

       

       

       

    (二)注解创建对象

       

       

    1、在要创建对象的类上面,使用注解即可实现

       

       

       

    2、创建对象的注解一共有四个,且都作用在类上:

       

    1@Component

       

    2@Controller

       

    3@Service

       

    4@Repository

       

    目前这四个注解功能是一样的,都用来创建对象」

       

       

       

       

    3、在类上加上 @Scope 注解,设置创建的对象是单实例还是多实例

       

    1singleton:默认值,单实例

       

    2prototype多实例

       

       

       

    4、具体实现

       

    1)编写一个普通类

       

    User.java:

       

    package com.siwuxie095.anno;

       

    import org.springframework.context.annotation.Scope;

    import org.springframework.stereotype.Component;

       

    /**

    * 用注解的方式创建对象:@Component(value="user")

    *

    * 也可简写为 @Component("user"),即 value 省略不写

    *

    *

    * 类似于配置文件中的:<bean id="user" class="com.siwuxie095.anno.User"></bean>

    *

    */

    @Component(value="user")

    @Scope(value="singleton")

    public class User {

     

    public void add() {

    System.out.println("----- add -----");

    }

     

    }

       

       

       

    2)编写一个测试类

       

    TestAnno.java:

       

    package com.siwuxie095.anno;

       

    import org.junit.Test;

    import org.springframework.context.ApplicationContext;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

       

    public class TestAnno {

     

    /**

    * 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 jar 包)

    *

    * 选中方法名,右键->Run As->JUint Test

    */

    @Test

    public void testUser() {

     

    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

     

    User user=(User) context.getBean("user");

     

    user.add();

    }

     

    }

       

       

       

       

       

       

       

    (三)注解注入属性

       

       

    1、应用场景:在 Service 类中得到 Dao 类的对象

       

       

       

    2、属性注入的注解:

       

    1@Autowired默认按类型进行装配注入

       

    如果想要按名称进行装配注入,需要结合 @Qualifier 注解进行使用

       

       

    2@Resource默认按名称进行装配注入

       

       

    「使用注解注入属性,可以不提供属性的 set 方法」

       

       

       

    4、@Autowired 和 @Resource 可作用在属性和属性的 set 方法上

       

       

       

    5、建议:

       

    @Autowired 由 Spring 提供,@Resource 由 J2EE 提供

       

    为减少对 Spring 的依赖,建议使用 @Resource

       

       

       

    6、具体实现

       

    1)编写一个 Dao 类

       

    Dao.java:

       

    package com.siwuxie095.anno;

       

    import org.springframework.stereotype.Component;

       

    /**

    * 用注解的方式创建对象:@Component(value="dao")

    *

    * 也可简写为 @Component("dao"),即 value 省略不写

    */

    @Component(value="dao")

    public class Dao {

       

    public void add() {

    System.out.println("----- Dao -----");

    }

     

    }

       

       

       

    2)编写一个 Service 类

       

    Service.java:

       

    package com.siwuxie095.anno;

       

    import javax.annotation.Resource;

       

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.beans.factory.annotation.Qualifier;

    import org.springframework.stereotype.Component;

       

    /**

    * 用注解的方式创建对象:@Component(value="service")

    *

    * 也可简写为 @Component("service"),即 value 省略不写

    */

    @Component(value="service")

    public class Service {

     

    /*

    * 注意:(1)=(2)=(3),三者可相互替换

    */

     

     

    /* (1)

    *

    * @Autowired 默认按类型进行装配注入

    *

    * 使用注解注入属性,可以不提供属性的 set 方法

    */

    @Autowired

    private Dao dao;

     

     

    /* (2)

    *

    * @Autowired @Qualifier(value="dao") 结合使用,

    * 按名称进行装配注入(可写在同一行,也可写在两行)

    *

    * value 可以省略不写,即 @Qualifier("dao")

    */

    // @Autowired

    // @Qualifier(value="dao")

    // private Dao dao;

     

     

    /* (3)

    *

    * @Resource 默认按名称进行装配注入

    *

    * @Resource(name="dao") 按名称进行装配注入

    *

    * @Resource(type=Dao.class) 按类型进行装配注入

    */

    // @Resource

    // private Dao dao;

     

    public void add() {

    System.out.println("----- Service -----");

    dao.add();

    }

     

    }

       

       

       

    3)编写一个测试类

       

    TestAnno.java:

       

    package com.siwuxie095.anno;

       

    import org.junit.Test;

    import org.springframework.context.ApplicationContext;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

       

    public class TestAnno {

     

    /**

    * 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 jar 包)

    *

    * 选中方法名,右键->Run As->JUint Test

    */

    @Test

    public void testService() {

     

    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

     

    Service service=(Service) context.getBean("service");

     

    service.add();

    }

     

    }

       

       

       

       

       

       

       

    (四)注解和配置文件混合使用

       

       

    1、一般情况下:

       

    1创建对象的操作,使用配置文件的方式实现

       

    2注入属性的操作,使用注解的方式实现

       

       

       

    2、具体实现

       

    1)编写一个 Dao 类

       

    Dao.java:

       

    package com.siwuxie095.anno;

       

       

    public class Dao {

       

    public void add() {

    System.out.println("----- Dao -----");

    }

     

    }

       

       

       

    2)编写一个 Service 类

       

    Service.java:

       

    package com.siwuxie095.anno;

       

    import javax.annotation.Resource;

       

       

    public class Service {

     

    @Resource

    private Dao dao;

       

     

    public void add() {

    System.out.println("----- Service -----");

    dao.add();

    }

     

    }

       

       

       

    3)在配置文件中配置 Bean

       

    applicationContext.xml:

       

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="

    http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context.xsd">

       

       

    <!--

    开启注解扫描:到包中扫描类、方法、属性上面是否有注解

     

    base-package 属性:表示要扫描的包。如果有多个,以逗号隔开,

    缩短包路径,写成 com.siwuxie095,甚至写成 com

    -->

    <context:component-scan base-package="com.siwuxie095.anno"></context:component-scan>

     

    <bean id="dao" class="com.siwuxie095.anno.Dao"></bean>

     

    <bean id="service" class="com.siwuxie095.anno.Service"></bean>

       

       

    </beans>

       

       

       

    4)编写一个测试类

       

    TestAnno.java:

       

    package com.siwuxie095.anno;

       

    import org.junit.Test;

    import org.springframework.context.ApplicationContext;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

       

    public class TestAnno {

     

    /**

    * 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 jar 包)

    *

    * 选中方法名,右键->Run As->JUint Test

    */

    @Test

    public void testService() {

     

    ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

     

    Service service=(Service) context.getBean("service");

     

    service.add();

    }

     

    }

       

       

       

       

       

       

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    hive高阶函数和采样-优化
    zookeeper搭建
    hive常用函数和建表
    hive常用函数-建表-jdbc
    hadoop远程调试和配置HA
    hadoop-MR-排序
    python spark
    jenkins安装
    beetlsql
    spark页面单跳转化率
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/7407147.html
Copyright © 2020-2023  润新知