Spring有哪几种依赖注解呢?

书欣 Spring 发布时间:2023-01-04 17:40:50 阅读数:3017 1
下文笔者讲述Spring依赖注解的四种方式,如下所示

依赖注入的方式

依赖注入方式:
  方式1:Set注入 
  方式2:构造器注入  
  方式3:静态工厂的方法注入 
  方式4:实例工厂的方法注入

Set注入

例:
有一个SpringAction
   类中需要实例化一个SpringDao对象
 此时可定义一个private的SpringDao成员变量
 创建SpringDao的set方法 
package com.java265.springdemo.action;  
public class SpringAction {  
        //注入对象springDao  
    private SpringDao springDao;  
        //一定要写被注入对象的set方法  
        public void setSpringDao(SpringDao springDao) {  
        this.springDao = springDao;  
    }  
  
    public void test(){  
        springDao.test();  
    }  
}

编写xml开始set注入

<!--配置bean,配置后该类由spring管理-->  
    <bean name="springAction" class="com.java265.springdemo.action.SpringAction">  
        <!--(1)依赖注入,配置当前类中相应的属性-->  
        <property name="springDao" ref="springDao"></property>  
    </bean>  

<bean name="springDao" class="com.java265.springdemo.dao.impl.SpringDaoImpl"></bean>  

构造器注入

这种方式的注入是指带有参数的构造函数注入
 创建两个成员变量SpringDao和User
 但是并未设置对象的set方法
  注入方式是在SpringAction的构造函数中注入
  创建SpringAction对象时要将SpringDao和User两个参数值传入
public class SpringAction {  
    //注入对象springDao  
    private SpringDao springDao;  
    private User user;  
      
    public SpringAction(SpringDao springDao,User user){  
        this.springDao = springDao;  
        this.user = user;  
        System.out.println("构造方法调用springDao和user");  
    }  
          
        public void save(){  
        user.setName("猫猫");  
        springDao.save(user);  
    }  
}  

xml配置

<!--配置bean,配置后该类由spring管理-->  
    <bean name="springAction" class="com.java265.springdemo.action.SpringAction">  
        <!--(2)创建构造器注入,如果主类有带参的构造方法则需添加此配置-->  
        <constructor-arg ref="springDao"></constructor-arg>  
        <constructor-arg ref="user"></constructor-arg>  
    </bean>  
        <bean name="springDao" class="com.java265.springdemo.dao.impl.SpringDaoImpl"></bean>  
         <bean name="user" class="com.java265.springdemo.vo.User"></bean>  

静态工厂的方法注入

通过调用静态工厂的方法来获取自己需要的对象
  为了让spring管理所有对象
    不能直接通过"工程类.静态方法()"来获取对象,而是依然通过spring注入的形式获取:
 
package com.java265.springdemo.factory;  
  
import com.java265.springdemo.dao.FactoryDao;  
import com.java265.springdemo.dao.impl.FactoryDaoImpl;  
import com.java265.springdemo.dao.impl.StaticFacotryDaoImpl;  
  
public class DaoFactory {  
    //静态工厂  
    public static final FactoryDao getStaticFactoryDaoImpl(){  
        return new StaticFacotryDaoImpl();  
    }  
}  

同样看关键类,这里我需要注入一个FactoryDao对象,这里看起来跟第一种注入一模一样,但是看随后的xml会发现有很大差别:
Java代码   收藏代码
 public class SpringAction {  
        //注入对象  
    private FactoryDao staticFactoryDao;  
      
    public void staticFactoryOk(){  
        staticFactoryDao.saveFactory();  
    }  
    //注入对象的set方法  
    public void setStaticFactoryDao(FactoryDao staticFactoryDao) {  
        this.staticFactoryDao = staticFactoryDao;  
    }  
}  
 
Spring的IOC配置文件
 
 <bean name="staticFactoryDao">
   指向的class并不是FactoryDao的实现类
   而是指向静态工厂DaoFactory
   且配置factory-method="getStaticFactoryDaoImpl"
    指定调用哪个工厂方法

<!--配置bean,配置后该类由spring管理-->  
    <bean name="springAction" class="com.java265.springdemo.action.SpringAction" >  
        <!--(3)使用静态工厂的方法注入对象,对应下面的配置文件(3)-->  
        <property name="staticFactoryDao" ref="staticFactoryDao"></property> 
    </bean>  
    <!--(3)此处获取对象的方式是从工厂类中获取静态方法-->  
    <bean name="staticFactoryDao" class="com.java265.springdemo.factory.DaoFactory" factory-method="getStaticFactoryDaoImpl"></bean>  
 

实例工厂的方法注入

 获取对象实例的方法不是静态的
   需要首先new工厂类
 再调用普通的实例方法
 
例:
public class DaoFactory {  
    //实例工厂  
    public FactoryDao getFactoryDaoImpl(){  
        return new FactoryDaoImpl();  
    }  
}  

public class SpringAction {  
    //注入对象  
    private FactoryDao factoryDao;  
      
    public void factoryOk(){  
        factoryDao.saveFactory();  
    }  
  
    public void setFactoryDao(FactoryDao factoryDao) {  
        this.factoryDao = factoryDao;  
    }  
}  
 
//Xml代码
<!--配置bean,配置后该类由spring管理-->  
    <bean name="springAction" class="com.java265.springdemo.action.SpringAction">  
        <!--(4)使用实例工厂的方法注入对象,对应下面的配置文件(4)-->  
        <property name="factoryDao" ref="factoryDao"></property>  
    </bean>  
      
    <!--(4)此处获取对象的方式是从工厂类中获取实例方法-->  
    <bean name="daoFactory" class="com.java265.springdemo.factory.DaoFactory"></bean>  
    <bean name="factoryDao" factory-bean="daoFactory" factory-method="getFactoryDaoImpl"></bean>  
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202301/5288.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者