Spring有哪几种依赖注解呢?
下文笔者讲述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>
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


