spring——Spring自动装配——示例

快来打我* 2024-03-31 17:25 139阅读 0赞
1. 不使用自动装配(autowire=”no”)

autowire=”no” 表示不使用自动装配,此时我们必须通过 元素的 元素的 ref 属性维护 Bean 的依赖关系。

2. 按名称自动装配(autowire=”byName”)

autowire=”byName” 表示按属性名称自动装配,XML 文件中 Bean 的 id 或 name 必须与类中的属性名称相同。

3. 按类型自动装配(autowire=”byType”)

autowire=”byType” 表示按类中对象属性数据类型进行自动装配。即使 XML 文件中 Bean 的 id 或 name 与类中的属性名不同,只要 Bean 的 class 属性值与类中的对象属性的类型相同,就可以完成自动装配。

4. 构造函数自动装配(autowire=”constructor”)

autowire=”constructor” 表示按照 Java 类中构造函数进行自动装配。

5. 默认的自动装配模式(autowire=”default”)

默认采用上一级标签 设置的自动装配规则(default-autowire)进行装配,Beans.xml 中的配置内容如下。

=======================================================================

项目依赖:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>ssw</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <properties>
  10. <maven.compiler.source>8</maven.compiler.source>
  11. <maven.compiler.target>8</maven.compiler.target>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>org.springframework</groupId>
  16. <artifactId>spring-context</artifactId>
  17. <version>5.3.6</version>
  18. </dependency>
  19. </dependencies>
  20. </project>

929a4a3126386720b3fb9a658bfb1dfb.png

dept类:

  1. package org.example;
  2. public class Dept {
  3. //部门编号
  4. private String deptNo;
  5. //部门名称
  6. private String deptName;
  7. public Dept() {
  8. System.out.println("正在执行 Dept 的无参构造方法>>>>");
  9. }
  10. public Dept(String deptNo, String deptName) {
  11. System.out.println("正在执行 Dept 的有参构造方法>>>>");
  12. this.deptNo = deptNo;
  13. this.deptName = deptName;
  14. }
  15. public void setDeptNo(String deptNo) {
  16. System.out.println("正在执行 Dept 的 setDeptNo 方法>>>>");
  17. this.deptNo = deptNo;
  18. }
  19. public void setDeptName(String deptName) {
  20. System.out.println("正在执行 Dept 的 setDeptName 方法>>>>");
  21. this.deptName = deptName;
  22. }
  23. public String getDeptNo() {
  24. return deptNo;
  25. }
  26. public String getDeptName() {
  27. return deptName;
  28. }
  29. @Override
  30. public String toString() {
  31. return "Dept{" +
  32. "deptNo='" + deptNo + '\'' +
  33. ", deptName='" + deptName + '\'' +
  34. '}';
  35. }
  36. }

3618a97b0f747a7f307d22e4c495814d.png

employee类:

  1. package org.example;
  2. public class Employee {
  3. //员工编号
  4. private String empNo;
  5. //员工姓名
  6. private String empName;
  7. //部门信息
  8. private Dept dept;
  9. public Employee() {
  10. System.out.println("正在执行 Employee 的无参构造方法>>>>");
  11. }
  12. public Employee(String empNo, String empName, Dept dept) {
  13. System.out.println("正在执行 Employee 的有参构造方法>>>>");
  14. this.empNo = empNo;
  15. this.empName = empName;
  16. this.dept = dept;
  17. }
  18. public void setEmpNo(String empNo) {
  19. System.out.println("正在执行 Employee 的 setEmpNo 方法>>>>");
  20. this.empNo = empNo;
  21. }
  22. public void setEmpName(String empName) {
  23. System.out.println("正在执行 Employee 的 setEmpName 方法>>>>");
  24. this.empName = empName;
  25. }
  26. public void setDept(Dept dept) {
  27. System.out.println("正在执行 Employee 的 setDept 方法>>>>");
  28. this.dept = dept;
  29. }
  30. public Dept getDept() {
  31. return dept;
  32. }
  33. public String getEmpNo() {
  34. return empNo;
  35. }
  36. public String getEmpName() {
  37. return empName;
  38. }
  39. @Override
  40. public String toString() {
  41. return "Employee{" +
  42. "empNo='" + empNo + '\'' +
  43. ", empName='" + empName + '\'' +
  44. ", dept=" + dept +
  45. '}';
  46. }
  47. }

6693d75073182ec58446aae7daaa5b12.png

bean.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-autowire="constructor">
  6. <bean id="dept" class="org.example.Dept">
  7. <property name="deptNo" value="1"></property>
  8. <property name="deptName" value="技术部"></property>
  9. </bean>
  10. <bean id="employee" class="org.example.Employee" autowire="no">
  11. <property name="empNo" value="002"></property>
  12. <property name="empName" value="小郭"></property>
  13. <property name="dept" ref="dept"></property>
  14. </bean>
  15. </beans>

98f396bfc5bddae24ec4f44a6b1a000a.png

执行:

  1. package org.example;
  2. import org.apache.commons.logging.Log;
  3. import org.apache.commons.logging.LogFactory;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6. public class Main
  7. {
  8. private static final Log LOGGER = LogFactory.getLog(Main.class);
  9. public static void main(String[] args)
  10. {
  11. ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
  12. Employee employee = context.getBean("employee", Employee.class);
  13. System.out.println(employee);
  14. }
  15. }

ef3082e2d3cae0464f00b26358567832.png

执行结果:

6780153527dcdda016c3d0739248a418.png

========================================================

1. 不使用自动装配(autowire=”no”)

autowire=”no” 表示不使用自动装配,此时我们必须通过 元素的 元素的 ref 属性维护 Bean 的依赖关系。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-autowire="constructor">
  6. <bean id="dept" class="org.example.Dept">
  7. <property name="deptNo" value="1"></property>
  8. <property name="deptName" value="技术部"></property>
  9. </bean>
  10. <bean id="employee" class="org.example.Employee" autowire="no">
  11. <property name="empNo" value="002"></property>
  12. <property name="empName" value="小郭"></property>
  13. <property name="dept" ref="dept"></property>
  14. </bean>
  15. </beans>

bc5c7ea97399d907b43c37c3dc92079c.png

执行结果:

22426fd47001b22ec2b2e7842e570f3f.png

2. 按名称自动装配(autowire=”byName”)

autowire=”byName” 表示按属性名称自动装配,XML 文件中 Bean 的 id 或 name 必须与类中的属性名称相同。

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans
  4. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" >
  5. <bean id="dept" class="org.example.Dept">
  6. <property name="deptNo" value="1"></property>
  7. <property name="deptName" value="技术部"></property>
  8. </bean>
  9. <bean id="employee" class="org.example.Employee" autowire="byName">
  10. <property name="empNo" value="002"></property>
  11. <property name="empName" value="小郭"></property>
  12. </bean>
  13. </beans>

d557b567333fcdade90c42d3a14b3c0a.png

5dd99ed82ddb65bbec0711904d80bd36.png

3. 按类型自动装配(autowire=”byType”)

autowire=”byType” 表示按类中对象属性数据类型进行自动装配。即使 XML 文件中 Bean 的 id 或 name 与类中的属性名不同,只要 Bean 的 class 属性值类中的对象属性的类型相同,就可以完成自动装配。

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans
  4. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" >
  5. <bean id="dept2" class="org.example.Dept">
  6. <property name="deptNo" value="1"></property>
  7. <property name="deptName" value="技术部"></property>
  8. </bean>
  9. <bean id="employee" class="org.example.Employee" autowire="byType">
  10. <property name="empNo" value="002"></property>
  11. <property name="empName" value="小郭"></property>
  12. </bean>
  13. </beans>

e0421c052ae5ac128e929c82b13ffd72.png

执行结果:

7072c84a5e01868c205ac34c5e010c08.png

ad4dfc5f63a54807673e33ba2844b4e1.png

4. 构造函数自动装配(autowire=”constructor”)

autowire=”constructor” 表示按照 Java 类中构造函数进行自动装配。

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans
  4. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  5. <bean id="dept2" class="org.example.Dept">
  6. <constructor-arg name="deptNo" value="1"></constructor-arg>
  7. <constructor-arg name="deptName" value="技术部"></constructor-arg>
  8. </bean>
  9. <bean id="employee" class="org.example.Employee" autowire="constructor">
  10. <constructor-arg name="empNo" value="002"></constructor-arg>
  11. <constructor-arg name="empName" value="小郭"></constructor-arg>
  12. </bean>
  13. </beans>

dbaf4254844c0aba7a8160c2fd705eac.png

22870237aa8e7ad504a5e7846fe7672d.png

5. 默认的自动装配模式(autowire=”default”)

默认采用上一级标签 设置的自动装配规则(default-autowire)进行装配,Beans.xml 中的配置内容如下。

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans
  4. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-autowire="byType">
  5. <bean id="dept2" class="org.example.Dept">
  6. <property name="deptNo" value="1"></property>
  7. <property name="deptName" value="技术部"></property>
  8. </bean>
  9. <bean id="employee" class="org.example.Employee" autowire="default">
  10. <property name="empNo" value="002"></property>
  11. <property name="empName" value="小郭"></property>
  12. </bean>
  13. </beans>

0a64e697e99348620de0f91bcb0d0133.png

bbfd3209bdf4623956a1054d72f3fb46.png

发表评论

表情:
评论列表 (有 0 条评论,139人围观)

还没有评论,来说两句吧...

相关阅读

    相关 自动装配bean

    1.通过autowire中的byName实现自动装配 自动与set方法set后面的名字相同的bean的id匹配 注意:id必须上下文唯一,且和自己对象中set方法后边

    相关 【Spring】自动装配

    自动装配 Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值 1)、@Autowired:自动注入 默认优先按照类型去容器中找对应