• Spring框架中的bean管理(XML和注解及属性的注入)


    Spring框架中IOC就是将创建对象的权力反转给Spring框架,我们无需自己创建对象,直接在Spring框架的容器中获取即可。

    bean中配置的就是需要让Spring管理的类。


    XML的bean管理 

    先写个“HelloWorld”:

    1. <bean id="User" class="com.ffyc.spring.model.User" scope="singleton">
    2. <property name="id" value="11">property>
    3. <property name="name" value="aaa">property>
    4. <constructor-arg name="id" value="111">constructor-arg>
    5. <constructor-arg name="name" value="aaa">constructor-arg>
    6. bean>

    上面代码的含义就是创建单例的User对象,并且实现了依赖注入。bean依赖注入的两种方式:一种是属性的set方法注入(property标签),通过Java反射机制(所以前提是User类中必须存在当前属性的set方法),为属性赋值。另一种是构造方法的注入(constructor-arg标签),通过类中的构造方法赋值。

    以上代码描述了通过bean标签实现通过Spring创建对象并赋值,称为依赖注入(Dependency Injection)DI。

    在实际开发中并没有如此简单,例如在一个类中调用另一个类,使用bean标签该如何处理呢?

    1. public class UserService {
    2. UserDao userDao;
    3. public void saved(){
    4. userDao.save();
    5. }
    6. }
    1. <bean id="UserDao" class="com.ffyc.spring.Dao.UserDao">bean>
    2. <bean id="UserService" class="com.ffyc.spring.Service.UserService">
    3. <property name="userDao" ref="UserDao">property>
    4. bean>

    如上我们新建UserDao类和UserService类,在UserService类中调用UserDao类中的方法,使用bean管理这两个类。

    使用XML我们发现工作量太大,如果模块很多,那每次加入一个模块就要添加一个bean。


    使用注解进行bean管理 

    在Spring中配置当前标签,就可以通过注解,自动扫描指定包下的类,可自动解析注解。

    模型类: 

    1. @Data
    2. @Component("User")
    3. @Scope("prototype")
    4. public class User {
    5. private Integer id;
    6. private String name;
    7. }

    数据访问层: 

    1. @Data
    2. @Repository("userDao")
    3. public class UserDao {
    4. public void save() {
    5. System.out.println("保存成功!");
    6. }
    7. }

    Service层: 

    1. @Data
    2. @Service("userService")
    3. public class UserService {
    4. @Autowired //属性的注入
    5. @Qualifier("userDao")
    6. UserDao userDao;
    7. public void saved(){
    8. userDao.save();
    9. }
    10. }

    各层类使用不同的注解标签和名字。在Spring框架中,一般把由Spring框架管理创建的对象称为一个bean对象,与我们普通的对象不同,因为Spring框架可以进行功能上的增强。

    补充:Spring为了每层更加清晰,(为了后续的扩展功能,在不同层使用不同的注解标记)

    模型类:@Compontent

    Service层:@Service 

    数据访问层:@Repository

    Spring中注解的自动注入:

    两种方式:

    1,@Autowired Spring框架中提供的注解标签,可以提供两种方式进行属性注入。

    ①bean名称注入 @Qualifier(value="bean名称")

    1. @Data
    2. @Service("userService")
    3. public class UserService {
    4. @Autowired //属性的注入
    5. @Qualifier("userDao")
    6. UserDao userDao;
    7. public void saved(){
    8. userDao.save();
    9. }
    10. }
    1. @Data
    2. @Repository("userDao")
    3. public class UserDao {
    4. Integer id;
    5. String name;
    6. public void save() {
    7. System.out.println("保存成功!");
    8. }
    9. }

    ②属性类型注入,如果没有指定名称,那么就是属性类型去容器中查找对应类型对象(常用)

    1. @Data
    2. @Service("userService")
    3. public class UserService {
    4. @Autowired //属性的注入
    5. UserDao userDao;
    6. public void saved(){
    7. userDao.save();
    8. }
    9. }
    1. @Data
    2. @Repository
    3. public class UserDao {
    4. Integer id;
    5. String name;
    6. public void save() {
    7. System.out.println("保存成功!");
    8. }
    9. }

     2,@Resource JDK提供的注解标签

    没有给定指定名称,就通过类型查找注入,若给定,则通过名称注入

    1. @Data
    2. @Service("userService")
    3. public class UserService {
    4. @Resource
    5. UserDao userDao;
    6. public void saved(){
    7. userDao.save();
    8. }
    9. }
    1. @Data
    2. @Repository
    3. public class UserDao {
    4. Integer id;
    5. String name;
    6. public void save() {
    7. System.out.println("保存成功!");
    8. }
    9. }
  • 相关阅读:
    小程序中如何查看会员的优惠券领取记录
    高并发下丢失更新的解决方案
    在离线环境下用 VScode 的 Remote-SSH 插件连接服务器
    Nginx学习笔记
    如何评价微软发布的Phi-3,手机都可以运行的小模型
    从0新建一个ts + webpack + react 项目
    CCF CSP认证 历年题目自练Day36
    黑马瑞吉外卖之套餐信息的修改
    汽车IVI中控开发入门及进阶(三十二):i.MX linux开发之Yocto
    微服务初级入门实战分布式项目构建
  • 原文地址:https://blog.csdn.net/m0_71385141/article/details/134423720