Spring IOC 四种依赖注入

Spring IOC 四种依赖注入

前期准备
  • 1、创建一个Maven工程

  • 2、创建一个实体类

    public class User {
    	private Integer id;
    	private String userName;
    	private String password;
    	private String note;
        
    	public User setId(Integer id) {
    		this.id = id;
    		return this;
    	}
    	public User setUserName(String userName) {
    		this.userName = userName;
    		return this;
    	}
    	public User setPassword(String password) {
    		this.password = password;
    		return this;
    	}
    	public User setNote(String note) {
    		this.note = note;
    		return this;
    	}
        //注意 :toString,get方法自行实现,
    }
    
  • 3、引入pom依赖

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.1.RELEASE</version>
    </dependency>
    
  • 4、在src/main/java中创建beans.xml,并写入如下内容

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
    
    </beans>
    
一、静态工厂
  • 1、首先创建一个静态工厂UserFactory

    public class UserFactory {
    	private static User user;
    	public static User getInstance() {
    		if(user == null) {
    			user = new User();
    			user.setId(1).setUserName("王五").setPassword("hwy499").setNote("无");
    		}
    		return user;
    	}
    }
    
  • 2、在Beans.xml文件中配置该静态工厂

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
       
        <!-- factory-method : 获得对象的静态方法名 class:静态工厂类的全限定类名-->
    	<bean class="com.factory.UserFactory" factory-method="getInstance"  id ="userFactory">
    	</bean>
    </beans>
    
  • 3、测试

    public class UserFactoryTest {
    	public static void main(String[] args) {
    		// 加载 beans.xml
    		ClassPathXmlApplicationContext cpac = new 
    				ClassPathXmlApplicationContext("beans.xml");
            // 获得实例
    		User user = cpac.getBean("userFactory", User.class);
            // 打印
    		System.out.println(user); 
            //User [id=1, userName=王五, password=hwy499, note=无]
    	}
    }
    
二、实例工厂注入
  • 1、创建一个工厂类UserFactory

    public class UserFactory {
    	private User user;
    	public User getInstance() {
    		if (user == null) {
    			user = new User();
    			user.setId(1).setUserName("王五").setPassword("hwy499").setNote("无");
    		}
    		return user;
    	}
    }
    
  • 2、在beans.xml中配置工厂类的实例

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
    
    	<bean class="com.factory.UserFactory" id="userFactory">
    	</bean>
    	
    	<bean class="com.bean.User" factory-bean="userFactory"  factory-method="getInstance" id = "user">
    	</bean>
    </beans>
    
  • 3、测试

    public class UserFactoryTest {
    	public static void main(String[] args) {
    		//加载 beans.xml
    		ClassPathXmlApplicationContext cpac = new 
    				ClassPathXmlApplicationContext("beans.xml");
    		//User user = cpac.getBean("userFactory", User.class);
    		User user = cpac.getBean("user",User.class);
    		System.out.println(user); 
             //User [id=1, userName=王五, password=hwy499, note=无]
    	}
    }
    
三、Set 方法注入
  • 1、在beans.xml中进行如下配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
        <!--通过set方法注入 为什么这种方法叫做通过set方法注入呢?
    		这个跟我们在property标签中添加的name有关,在property中添加的name
    		并不是我们实体类中的属性名,而是我们在其中添加的set方法中set之后的名字,
    		假如我们现在实体类中有一个属性叫name,而它对应的set方法为setUserName,
    		那么我就要在property标签中添加name="username",而不是name="name"
    	-->
    	<bean id="user" class="com.bean.User">
    		<property name="id" value="1" />
    		<property name="userName" value="李四" />
    		<property name="password" value="123456123" />
    		<property name="note" value="我是一个备注" />
    	</bean>
    </beans>
    
  • 2、测试

    public class SetTest {
    	public static void main(String[] args) {
    		//加载 beans.xml
    		ClassPathXmlApplicationContext cpac = new 
    				ClassPathXmlApplicationContext("beans.xml");
    		//User user = cpac.getBean("userFactory", User.class);
    		User user = cpac.getBean("user",User.class);
    		System.out.println(user); 
             //User [id=1, userName=王五, password=hwy499, note=无]
    	}
    }
    
四、通过构造方法注入
  • 1、在实体类添加构造方法

    public User(){} //无参构造函数
    public User(Integer id, String userName, String password, String note) {
        super();
        this.id = id;
        this.userName = userName;
        this.password = password;
        this.note = note;
    }
    
  • 2、在bens.xml中添加如下配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
    
    	<bean id="user" class="com.bean.User">
    		<constructor-arg name="id" value="1" />
    		<constructor-arg name="userName" value="李四" />
    		<constructor-arg name="password" value="123456" />
    		<constructor-arg name="note" value="无备注消息" />
    	</bean>
    	<!--或是-->
        <bean id="user1" class="com.bean.User">
    		<constructor-arg index="0" value="1" />
    		<constructor-arg index="1" value="李四" />
    		<constructor-arg index="2" value="123456" />
    		<constructor-arg index="3" value="无备注消息" />
    	</bean>
    	<!--在或是 此时要注意先后问题,此时是按照你的构造函数的参数顺序依次赋值-->
        <bean id="user2" class="com.bean.User">
    		<constructor-arg  value="1" />
    		<constructor-arg  value="李四" />
    		<constructor-arg  value="123456" />
    		<constructor-arg  value="无备注消息" />
    	</bean>
    </beans>
    
  • 3、测试

    public class ConstructorTest {
    	public static void main(String[] args) {
    		//加载 beans.xml
    		ClassPathXmlApplicationContext cpac = new 
    				ClassPathXmlApplicationContext("beans.xml");
    		//User user = cpac.getBean("userFactory", User.class);
    		User user = cpac.getBean("user",User.class);
    		System.out.println(user); 
            // User [id=1, userName=李四, password=123456, note=无备注消息]
    	}
    }
    

我的公众号
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值