(本案例使用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/> <!–开启使用注解的方式注入属性 context文件头–>--> <!--<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