一、装配:Spring在Bean与Bean之间建立依赖关系的行为。

有3种方式:

  • 手动维护:在<constructor-arg>或者<property>标签种通过ref属性进行装配。

    <bean id="dept" class="org.caoze.autoWired.Dept"><property name="deptNo" value="1"></property><property name="deptName" value="技术部"></property>
    </bean>--><bean id="employee" class="org.caoze.autoWired.Employee"><property name="empNo" value="002"></property><property name="empName" value="小曹"></property><!--通过ref="dept"将"dept"与"employee"进行关联,这样就可以在类employee中使用类dept了,并且            可以直接将dept定义的属性注入到employee中了。--><property name="dept" ref="dept"></property>
    </bean>
  • 通过autowire自动装配:
byName

按名称自动装配。Spring会根据Java类中对象属性的名称,在整个应用的上下文ApplicationContext(Ioc容器)中查找,若某个Bean的id或name属性值与这个对象属性名称相同,则获取这个Bean,并与当前的Java类Bean建立关联。

byType                 按类型自动装配。Spring 会根据 Java 类中的对象属性的类型,在整个应用的上下文 ApplicationContext(IoC 容器)中查找。若某个 Bean 的 class 属性值与这个对象属性的类型相匹配,则获取这个 Bean,并与当前的 Java 类的 Bean 建立关联关系。
constructor

与buType模式相似,不同之处在于他应用于构造器参数,如果在容器中没有找到与构造器参数类型一致的Bean,那么将抛出异常。

其实就是根据构造器参数的数据类型,进行byType模式的自动装配。

default                 表示默认采用上一级元素<beans>设置的自动装配规则装配。
no                        默认值表示不使用自动装配。
    <!--按名称自动装配,xml中bean的id或name必须与类中的属性名相同,即在类employee中必须有一个属性            名为dept--><bean id="dept" class="org.caoze.autoWired.Dept"><property name="deptNo" value="1"></property><property name="deptName" value="技术部"></property></bean><bean id="employee" class="org.caoze.autoWired.Employee" autowire="byName"><property name="empNo" value="002"></property><property name="empName" value="小张"></property></bean><!--根据构造函数自动装配,两个类的属性注入使用的就是构造函数注入,然后再将类dept装配进类 employee中--><bean id="dept" class="org.caoze.autoWired.Dept"><constructor-arg name="deptNo" value="1"></constructor-arg><constructor-arg name="deptName" value="技术部"></constructor-arg></bean><bean id="employee" class="org.caoze.autoWired.Employee" autowire="constructor"><constructor-arg name="empNo" value="002"></constructor-arg><constructor-arg name="empName" value="小张"></constructor-arg></bean>
  • 通过注解自动装配

1、新建如下所示的文件目录结构

2、首先在Beans.xml中开启组件扫描功能

<context:component-scan base-package="org.caoze"></context:component-scan>

3、新建接口UserDao.java

package org.caoze.Dao;public interface UserDao {public void print();
}

4、新建接口UserDao的实现类UserDaoImpl.java

package org.caoze.Dao.impl;import org.caoze.Dao.UserDao;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;//@Repository将数据访问层的类标识为Spring中的bean
// @Repository("UserDao")
@Component("userDao")
public class UserDaoImpl implements UserDao {@Overridepublic void print() {System.out.println("first");}
}

5、新建接口UserService.java

package org.caoze.service;public interface UserService {public void out();
}

6、新建接口UserService的实现类UserServiceImpl.java

import org.caoze.Dao.UserDao;
import org.caoze.Dao.impl.UserDaoImpl;
import org.caoze.service.UserService;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;//@Service:将业务层(service)的类标识为Spring中的bean
// @Service("userService")
@Component("userService")
public class UserServiceImpl implements UserService {//@Resource:默认按照Bean的名称装配(装配:spring在bean与bean之间建立依赖关系的行为)@Resource(name = "userDao")private UserDao userDao;//这是不使用spring来创建实例,即通过类来新建对象。// UserDao userDao = new UserDaoImpl();public UserDao getUserDao(){return userDao;}public void setUserDao(UserDao userDao){this.userDao = userDao;}public void out(){userDao.print();System.out.println("second");}
}

7、新建UserController.java

import org.caoze.service.UserService;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;import javax.annotation.Resource;//@Controller:将控制层(controller)的类表识为spring中的bean
// @Controller("userController")
@Component("userController")
public class UserController {@Resourceprivate UserService userService;public void setUserService(UserService userService) {this.userService = userService;}public UserService getUserService() {return userService;}public void doStr(){userService.out();System.out.println("third");}
}

8、新建测试文件MainApp.java

import org.caoze.controller.UserController;
import org.caoze.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");UserController obj = context.getBean("userController",UserController.class);obj.doStr();}
}

9、运行MainApp.java,控制台打印出以下内容:

Spring(2)自动装配相关推荐

  1. spring Bean自动装配

    spring Bean自动装配 自动装配是使用spring满足bean依赖的一种方式. spring会在应用上下文中为某个bean寻找其依赖的bean. spring自动装配需要从两个角度来实现,或者 ...

  2. (Spring)自动装配bean

    文章目录 自动装配bean 1. 环境搭建 2. byName自动装配 3. byType自动装配 4. 使用注解自动装配 4.1 @Autowired和@Qualifier 4.2 @Resourc ...

  3. Spring autowire 自动装配简介

    Spring autowire 自动装配简介 注意本文与一般spring 标注@Autowire 无关 如下例子定义了3个类 Dperson Dcar & Daddress 其中Dperson ...

  4. Spring Autowire自动装配(转http://lep1985520.blog.163.com/blog/static/56600480200901441338486/)

    Spring Autowire自动装配 技术收藏 2009-01-14 16:13:38 阅读284 评论0   字号:大中小 订阅 Spring Autowire自动装配   在应用中,我们常常使用 ...

  5. Spring学习——自动装配

    自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean有三种装配机制,分别是: 在xml中显式配置 ...

  6. Spring Boot自动装配过程解析及简单Demo演示

    文章目录 1.约定大于配置 2.自动装配原理 2.1.`@SpringBootApplication` 2.2.`@EnableAutoConfiguration` 2.3.`@Import` 2.4 ...

  7. Spring | Bean自动装配详解

    个人主页:BoBooY的CSDN博客_Java领域博主 前言:上节我给大家讲解了Spring的依赖注入,这一节我们讲解Spring中Bean如何自动装配,废话不多说,直接上正文! 文章目录 Bean的 ...

  8. Spring Boot自动装配原理详解

    目录 1.环境和依赖 1.1.spring boot版本 1.2.依赖管理 2.自动装配 2.1.流程概述 2.2.三大步前的准备工作 2.2.1.注解入口 2.2.2.获取所有配置类 2.3.获取过 ...

  9. Spring Autowire自动装配

    1.在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象,同时也Spring为我们提供了一个自动装配的机制,在定义Bean时,<bean>标签有一个autow ...

  10. 【Spring】—— 自动装配

    一.Spring中装配bean的方式 1.在XML中显式配置 2.在Java中进行显式配置 3.隐士的bean发现机制和自动装配 二.自动装配示例 1.在需要装配到其他bean中的类中加入@Compo ...

最新文章

  1. ios常见加密解密方法
  2. idea代码提示插件_IDEA 插件推荐 —— 让你写出好代码的神器!
  3. C++语言之父 Bjarne Stroustrup 简介
  4. C语言文件操作(五)将txt格式16进制编码转化为txt格式汉字
  5. [2020.11.26NOIP模拟赛]勇者的后缀【SA,RMQ,主席树,二分】
  6. Jquery鼠标点击出现文字
  7. 网易第二季度营收205亿元 同比增长13%超预期
  8. 二维数组找鞍点c语言,怎么求一个二维数组的鞍点
  9. Java堆分配参数总结
  10. html转到百度的链接,简易制作百度跳转链接
  11. 王道训练营3月11日
  12. 您可能不了解JS:JavaScript圣经的见解
  13. Python 飞机航班案例分析
  14. TriCore 与 RT-Thread(TC264 移植)
  15. Why Would I Ever
  16. 漫画 | 芯片战争50年,Intel为什么干不掉AMD?
  17. 何恺明 matlab,[论文复现]何恺明博士CVPR2009去雾算法(1)
  18. 正兴证券损失通知书:Rosen Law Firm宣布针对中国正兴车轮集团有限公司提起证券集体诉讼和参加集体诉讼的重要截止日期
  19. 标品和非标品如何选品,选品的重要性,店铺怎样布局
  20. LVS三种工作方式八种算法

热门文章

  1. EMC硬件设计规范与滤波器使用注意事项
  2. 医院AI智能随访电话机器人-北京联络加Loojion自主研发
  3. 韦东山 IMX6ULL和正点原子_stm32入门开发板选野火还是正点原子好,哪个的视频讲到好一点?...
  4. Jenkins的Git配置
  5. 单总线协议(1—wire)
  6. APFS简要指南(Apple File System Guide)
  7. PDN 电源分配网络设计步骤 PDN layout步骤
  8. 游戏编程中的人工智能技术
  9. 思博伦Landslide CORE帮助UQ现网测试
  10. todo项目实现及总结