spring注入学习及注解

分两种(XML注入---细分(setter注入、构造器注入、工厂方法注入)和注解注入)

一、Spring注入方式

1.setter注入

配置文件:

<bean id="chinese" class="com.bayss.mydc.utils.Chinese">  
        <!-- 将StoneAxe注入给axe属性 -->  
        <property name="axe" ref="stoneAxe" />  
        <property name="name" value="孙悟空"/>  
    </bean> 

类:

public class Chinese implements Person {
private Axe axe;
private String name;


// 设值注入所需的setter方法
public void setAxe(Axe axe) {
this.axe = axe;
}


public void setName(String name) {
this.name = name;
}


// 实现Person接口的userAxe方法
public void useAxe() {
// 调用axe的chop方法,表明Person对象依赖于Axe对象
System.out.println("我是" + name + "用" + axe.chop());
}
}

2.构造器注入

配置文件:

 <bean id ="testConstructor" class="com.bayss.mydc.utils.TestConstructor">
    <constructor-arg index="0" value="23"></constructor-arg>
    <constructor-arg index="1" value="aaa"></constructor-arg>
    </bean>

类:

public class TestConstructor {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
public TestConstructor(int age, String name){
this.age = age;
this.name = name;
}
}

3.静态工厂方法注入:

限制:

①静态工厂方法不能有参数,也不能在Spring中定义静态工厂方法的参数;

②静态工厂方法只能是public,不能是private和protected;

③静态工厂方法不能和构造方法注入一起使用。

配置文件:

 <bean id="testStaticFactory" class="com.bayss.mydc.utils.TestStaticFactory" factory-method="getInstance"></bean>

类:

public class TestStaticFactory {

private String name = "";

public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public static TestStaticFactory getInstance(){
return new TestStaticFactory("static factory constructor");
}


public TestStaticFactory(String name) {
this.name = name;
}

}

4.实例工厂方法注入:

配置文件:

<bean id="userDao" class="com.bayss.mydc.utils.UserDao" factory-bean="instanceFactory" factory-method="getUserDao"></bean>
   
<bean id="instanceFactory" class="com.bayss.mydc.utils.InstanceFactory"></bean>

类:

public class InstanceFactory {

public UserDao getUserDao() {
return new UserDao("instance userDao factory ");
}

}

通过上面的配置,基本可以看出实例工厂比静态工厂就多了一个factory-bean,它定义了工厂bean;看到这里,就能想到,静态工厂创建和实例工厂创建是存在相同的限制的,就是我上面列举的那三条。不同的是实例工厂方法不是静态的,而静态工厂方法必须是静态的。

三种注入的方式讲完了,现在说一说开发中对他们的选择,spring虽然对工厂模式提供了完美的支持,但是在用到IoC模式设计系统时,就尽量不要用工厂类,spring支持工厂模式更多的是用来解决老系统的遗留问题的,是为了和遗留系统很好的集成,因此,在遇到遗留系统时,工厂模式是不错的选择,但如果您正在开发一套新系统,那就尽量不要使用工厂模式。



依赖注入的理解:也叫面向接口编程,在定义java依赖关系的时候通过接口进行定义,然后通过配置文件配置对应的实体类来进行关系的注入(注解也是这样),这种方式有利于解耦,程序设计没有那么的紧密

总结:上面说的四种,静态工厂注入和实例工厂原理都是set注入方式,其实应该还有一种叫接口注入,依赖注入的方式宏观分为三种:set注入、构造器注入和接口注入

接口注入:就是额外定义一个接口,通过调用接口,将所要注入的实体注入到类中,其实本质和setter注入以及构造器注入没有区别,还额外增加了一个类,所以都不怎么用了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值