spring的学习____14自动装配及其注解

(本案例使用maven项目)

1.三个实体类:

@Component
public class Cat {

    public void voice(){

        System.out.println("miaomiao~~~");
    }
}
@Component
public class Dog {

    public void voice(){
        System.out.println("wangwang~~~~");
    }
}
@Component
public class User {



    //@Autowired
    //@Qualifier(value = "cat")

    @Resource
    private Cat cat;


    //@Resource

    @Resource
    private Dog dog;

    public User() {
    }

    public User(Cat cat, Dog dog) {
        this.cat = cat;
        this.dog = dog;
    }

    public Cat getCat() {
        return cat;
    }

    public Dog getDog() {
        return dog;
    }

//    public void setDog(Dog dog) {
//        this.dog = dog;
//    }
//
//    public void setCat(Cat cat) {
//        this.cat = cat;
//    }


}

2.spring配置文件: (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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <!--cat  bean-->
    <!--<bean id="cat" class="com.xbf.pojo.Cat"/>-->
    <!--dog bean-->
    <!--<bean id="dog" class="com.xbf.pojo.Dog"/>-->

    <!--
    1.传统的方式:
    User bean
    -->
    <!--<bean id="user" class="com.xbf.pojo.User">-->
        <!--<property name="cat" ref="cat"/>-->
        <!--<property name="dog" ref="dog"/>-->
    <!--</bean>-->

    <!--
    2.按名称自动装配:
    目标:完成spring容器中bean的实现,并给所有属性赋值
    过程:从本类的set方法中抽出属性名;再到spring容器中若已有的bean的id名和属性名一致
         就完成注入
    User  bean-->
    <!--<bean id="user" class="com.xbf.pojo.User" autowire="byName"/>-->


    <!--
    3.按照类型自动装配:
    根据属性的类型在已有的spring bean容器中找相应的bean进行注入,若出现相同类型的bean,就会报错
    -->
    <!--<bean id="user" class="com.xbf.pojo.User" autowire="byType"/>-->

<!--===================利用注解的方式注入属性===========================================-->
    <!--利用注解的方式注入属性: <context:annotation-config/>  context文件头

    <!-
    4.<!-Autowired  在类中的属性上面写 @Autowired   按属性类型进行装配,与bean的ID无关-->
                  <!--可以不写set方法。-->


    <!--<context:annotation-config/>  &lt;!&ndash;开启使用注解的方式注入属性  context文件头&ndash;&gt;-->
    <!--<bean id="user" class="com.xbf.pojo.User"/>-->


    <!--
    5.Autowired :根据类型自动匹配
      加上 @Qualifier(不能单独使用)  配合着使用,相当于autowire="byName"
    -->


    <!--
    6. @Resource :先根据提供的属性的name 直接进行属性的注入;
                  根据默认的autowired="byname"进行属性注入;
                  根据autowired="bytype"进行属性的注入;
    -->
<!--==============类自动装配===========================================================-->
    <!--包的扫描: 使用注解替换bean 的id-->
    <!--
         写在类名上头的注解:
             @Controller :写在控制层类上
             @Service :写在业务层类上
             @Repository :写在Dao层类上
             @Component :无法按照三个分类,就用这个注解

    -->
    <!--6.-->
    <context:component-scan base-package="com.xbf.pojo"/>
    <!--
    配置文件中只需写一句话:
    <context:component-scan base-package="包路径">

    context:component 组件扫描
    base-package 基本包,可以指定多个包,逗号隔开
    功能 :扫描该包下的注解,并生成bean 注入属性
    -->
</beans>

<!--
  (类名 和 类id 的对应关系: 比较有意思~~~·)
  类目和ID对应表 (默认情况下):

        类名:    CAT        cAT         CaT        caT

        ID:          CAT         cAT        caT         caT

    分析:类名的关键在于第二个字母,第二个字母大写,首字母大写小写无所谓。如果第二个字母小写,那第一个必须小写。第二个字母之后大小写没关系。

               如果没有指定value,spring容器中id规则,是类名的首字母小写。
<!-=================================================================================
 类名和 bean的 id在自定义时:
 @Component(value="cat")
-->

3.测试类:

public class Test {


    @org.junit.Test
    public void test(){

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

        user.getCat().voice();
        user.getDog().voice();

    }


}

4.pop.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xbf</groupId>
    <artifactId>test1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>

        <!-- spring-webmvc spring包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>

        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- spring-tx -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.14.RELEASE</version>
        </dependency>

    </dependencies>

    <build>
        <resources>

            <!--希望maven在导出项目的时候(target),能够将我们的配置及资源导出-->

                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
        </resources>
    </build>


</project>

参考博客:https://www.cnblogs.com/kuotian/p/8795812.html

猜你喜欢

转载自www.cnblogs.com/xbfchder/p/11286307.html