Spring核心依赖注入(二)

    IOC(Inversion of Control):其思想是反转资源获取的方向。当某个Java对象(调用类)需要调用另一个Java对象(被调用类)的方法时,传统的做法有两种:

  • 原始做法:调用者主动创建被依赖对象,然后再调用被依赖对象的方法,也就是用new的调用构造器
        public class Test {  
            public static void main(String[] args) {  
                Account account=new Account();  
                //account实例调用User实例时需要new 一个实例;  
                account.setUser(new User());  
            }  
        }  

  • 简单工厂式(又称为静态工厂方法):调用者先找到被调用对象的工厂,然后主动通过工厂去获取被依赖对象,最后再调用被依赖对象的方法。

      1)简单工厂模式(Simple Factory)     

      2)工厂方法模式(Factory Method)

      3)抽象工厂模式(Abstract Factory)



首先定义所有Car的共性的接口,让Car进行实现
public interface Car {
	//定义所有Car的方法
	void driveCar();

	void stopCar();
}
奥迪车实现接口,重写方法
public class Audi implements Car {

	@Override
	public void driveCar() {
		System.out.println("启动奥迪");

	}

	@Override
	public void stopCar() {
		System.out.println("奥迪刹车");
	}

}
宝马车实现接口,重写方法
public class Bmw implements Car {

	@Override
	public void driveCar() {
		System.out.println("宝马启动");
	}

	@Override
	public void stopCar() {
		System.out.println("宝马停止");
	}

}
创建实体工厂类CarFactory,所需要的Car实例由工厂类进行创建
public class CarFactory {

	public Car getCar(String car) {
		// TODO Auto-generated constructor stub
		if ("audi".equalsIgnoreCase(car)) {
			return new Audi();
		} else if ("bmw".equalsIgnoreCase(car)) {
			return new Bmw();
		} else {
			return null;
		}
	}
}


    传统调用时都是需要先创建被依赖对象,然后再由调用对象进行调用,在应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源(声明成员变量,可以自动装配或者是ref进行引用), 这种行为也被称为查找的被动形式

    DI(Dependency Injection) — IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入. 相对于 IOC 而言,这种表述更直接。Spring框架主要有两个改变:(1)程序无需使用new调用构造器去创建对象,所有的Java对象都可以交给Spring容器去创建;(2)当调用者需要调用被依赖对象的方法时,调用者无须主动获取被依赖对象,只要等待Spring容器注入即可。


设置注入

IOC容器通过成员变量setter方法来进行注入被依赖的对象,这种方式简单、直观因而在Spring中大量使用。

(1)普通属性赋值

    public class User{  
       privateString username;  
       
       publicString getUsername() {  
           returnusername;  
       }  
       publicvoid setUsername(String username) {  
          this.username= username;  
       }  
    }  


XML配置

    <bean id="userAction"class="com.lsz.spring.action.User" >  
    <property name="username" value="admin"></property>  
    </bean>  
(2)对象赋值

    public class User{  
         private UserService userservice;  
         public UserServicegetUserservice() {  
              returnuser;  
         }  
         public void setUserservice(UserService userservice){  
             this.userservice= userservice;  
         }  
    }  
XML配置

    <!--对象的声明-->  
    <bean id="userService" class="com.lsz.spring.service.UserService"></bean>  
       
    <bean id="userAction"class="com.lsz.spring.action.User" >  
       <property name="userservice" ref="userService"></property>  
    </bean>  
(3)注入集合值 Properties、Map、Set、List

Java代码变量设置,并添加setter方法

package org.jcq.bean;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import org.springframework.stereotype.Component;

@Component
public class User {
	private List list;
	private Set set;
	private Map map;
	private Properties properties;

	public List getList() {
		return list;
	}

	public void setList(List list) {
		this.list = list;
	}

	public Set getSet() {
		return set;
	}

	public void setSet(Set set) {
		this.set = set;
	}

	public Map getMap() {
		return map;
	}

	public void setMap(Map map) {
		this.map = map;
	}

	public Properties getProperties() {
		return properties;
	}

	public void setProperties(Properties properties) {
		this.properties = properties;
	}

}

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:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<!-- 打开自动扫描 -->
	<context:component-scan base-package="org.jcq" />
	<!-- Spring配置可以管理一切java对象和组件 -->

	<bean id="string" class="java.lang.String"></bean>
	<!-- 将user类交给Spring管理器进行管理 -->
	<bean id="beingFactory" class="org.jcq.bean.BeingFactory"></bean>
	<bean id="dog" factory-bean="beingFactory" factory-method="getBean">
		<constructor-arg value="dog"></constructor-arg>
		<property name="message" value="tian" />
	</bean>
	<bean id="user" class="org.jcq.bean.User">
		<property name="list">
			<list>
				<value>集合属性1</value>
				<value>集合属性2</value>
				<value>集合属性3</value>
			</list>
		</property>
		<property name="map">
			<map>
				<entry key="Java大法" value="99.0">
				</entry>
			</map>
		</property>
		<property name="properties">
			<props>
				<prop key="血压">正常</prop>
			</props>
		</property>
		<property name="set">
			<set>
				<value>集合属性1</value>
				<value>集合属性1</value>
			</set>
		</property>
	</bean>
</beans>
(4)组合属性

Java代码配置

public class Account {
	@Resource
	private User user;

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

}
XML配置

<bean id="account" class="org.jcq.bean.Account">
		<property name="user.map">
			<map>
				<entry key="组合属性" value="success"></entry>
			</map>
		</property>
	</bean>
(5)Spring3.0提供的Java配置管理


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜马拉雅以南

奶茶,干杯?!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值