3.5 Bean的装配方式

基于XML配置的装配

  1. 创建Bean的实现类
package assemble;

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

public class ComplexUser {
	private String uname;
	private List<String> hobbyList;
	private Map<String,String> residenceMap;
	private Set<String> aliasSet;
	private String[] array;
//	使用构造方法注入,需要提供带参数的构造方法
	public ComplexUser(String uname, List<String> hobbyList, Map<String, String> residenceMap, Set<String> aliasSet,
			String[] array) {
		super();
		this.uname = uname;
		this.hobbyList = hobbyList;
		this.residenceMap = residenceMap;
		this.aliasSet = aliasSet;
		this.array = array;
	}
//	使用属性的setter方法注入,提供默认的无参构造方法,并为注入的属性提供setter方法
	public ComplexUser() {
		super();
		// TODO Auto-generated constructor stub
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public List<String> getHobbyList() {
		return hobbyList;
	}
	public void setHobbyList(List<String> hobbyList) {
		this.hobbyList = hobbyList;
	}
	public Map<String, String> getResidenceMap() {
		return residenceMap;
	}
	public void setResidenceMap(Map<String, String> residenceMap) {
		this.residenceMap = residenceMap;
	}
	public Set<String> getAliasSet() {
		return aliasSet;
	}
	public void setAliasSet(Set<String> aliasSet) {
		this.aliasSet = aliasSet;
	}
	public String[] getArray() {
		return array;
	}
	public void setArray(String[] array) {
		this.array = array;
	}
	@Override
	public String toString() {
		return "ComplexUser [uname=" + uname + ", hobbyList=" + hobbyList + ", residenceMap=" + residenceMap
				+ ", aliasSet=" + aliasSet + ", array=" + Arrays.toString(array) + "]";
	}
	
}

  1. 配置Bean
<?xml version="1.0" encoding="UTF-8"?>
<!-- - Application context definition for JPetStore's business layer. - Containsbean 
	references to the transaction manager and to the DAOs in - dataAccessContext-local/jta.xml(see 
	web.xml's "contextConfigLocation"). -->

<beans
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans">
	
	<!-- 使用构造方法注入方式装配ComplexUser实例user1 -->
	<bean id ="user1" class="assemble.ComplexUser">
		<constructor-arg index="0" value="chenheng1"/>
		<constructor-arg index="1" >
			<list>
				<value>唱歌</value>
				<value>跳舞</value>
				<value>爬山</value>
			</list>
		</constructor-arg>
		<constructor-arg index="2">
			<map>
				<entry key="dalian" value="大连"/>
				<entry key="beijing" value="北京"/>
				<entry key="shanghai" value="上海"/>
			</map>
		</constructor-arg>
		<constructor-arg index="3">
			<set>
				<value>陈恒100</value>
				<value>陈恒101</value>
				<value>陈恒102</value>
			</set>
		</constructor-arg>
		<constructor-arg index="4">
			<array>
				<value>aaaaa</value>
				<value>bbbbb</value>
			</array>
		</constructor-arg>
	</bean>
	
	
	<!-- 使用属性的setter方法注入方式装配ComplexUser实例user2 -->
	<bean id ="user2" class="assemble.ComplexUser">
		<property name="uname" value="chenheng2"/>
		<property name="hobbyList" >
			<list>
				<value>看书</value>
				<value>学习</value>
			</list>
		</property>
		<property name="residenceMap">
			<map>
				<entry key="shenyang" value="沈阳"/>
				<entry key="tianjin" value="天津"/>
			</map>
		</property>
		<property name="aliasSet">
			<set>
				<value>陈恒103</value>
				<value>陈恒104</value>
				<value>陈恒105</value>
			</set>
		</property>
		<property name="array">
			<array>
				<value>ccccc</value>
				<value>ddddd</value>
			</array>
		</property>
	</bean>
</beans>  
  1. 测试
package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import assemble.ComplexUser;

public class TestAssemble {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext xfc =new ClassPathXmlApplicationContext("applicationContext.xml");
		ComplexUser u1 = (ComplexUser)xfc.getBean("user1");//构造方法装配
		System.out.println(u1);
		ComplexUser u2 = (ComplexUser)xfc.getBean("user2");//setter方法装配
		System.out.println(u2);
	}

}

在这里插入图片描述
基于注解的装配

  1. @Component 仅仅表示一个组件对象(Bean),可以作用在任何层次上。

创建Bean的实现类

package annotation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
 /**相当于@Component("annotationUser"),annotationUser为Bean的id,默认为首字母小写的类名**/
public class AnnotationUser {
	@Value("xfc")
	private String uname;
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
}

配置注解

<?xml version="1.0" encoding="UTF-8"?>
<!-- - Application context definition for JPetStore's business layer. - Containsbean 
	references to the transaction manager and to the DAOs in - dataAccessContext-local/jta.xml(see 
	web.xml's "contextConfigLocation"). -->
<beans
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans">

	<context:component-scan base-package="annotation"/>
<!--使用context命名空间,通过Spring扫描包annotation及其子包下所有的Bean的实现类  -->
</beans>

测试

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import annotation.AnnotationUser;

public class TestAnnotation {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext xfc = new ClassPathXmlApplicationContext("annotationContext.xml");
		AnnotationUser u1 = (AnnotationUser)xfc.getBean("annotationUser");
		System.out.println(u1.getUname());
	}

}
  1. @Repository 该注解用于数据访问层(Dao)的类标识为Bean,功能与1相同
  2. @Service该注解用于业务逻辑层组件类(Service层),其功能于1相同
  3. @Controller该注解用于控制器组件类(Spring MVC 的 Controller)层,功能于1相同
  4. @Autowired该注解可以对成员变量、方法及构造方法进行标注,完成自动装配的工作。用来消除setter和getter方法。默认按照Bean的类型进行装配。
  5. @Resource,该注解与@Autowired功能一样,区别在于该注解是按照名称来装配注入的。其有两个属性–name和type。name属性指定Bean实例名称,即按照名称装配注入;type属性指定Bean类型,即按照Bean的类型进行装配。
  6. @Qualifier
    下面通过一个实例讲解:
    创建DAO层
package annotation.dao;

public interface TestDao {
	public void save();
}

package annotation.dao;

import org.springframework.stereotype.Repository;

@Repository
public class TestDaoImpl implements TestDao {

	public void save() {
		// TODO Auto-generated method stub
		System.out.println("testDao save");
	}

}

创建Service层

package annotation.service;

public interface TestService {
	public void save();
}

package annotation.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import annotation.dao.TestDao;

@Service
public class TestServiceImpl implements TestService {
	@Resource
	/* 相当于 @Autowired 默认按照Bean类型装配 */
	private TestDao testDao;

	public void save() {
		// TODO Auto-generated method stub
		testDao.save();
		System.out.println("testService save");
	}

}

创建Controller层

package annotation.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import annotation.service.TestService;

@Controller
public class TestController {
	@Autowired
	private TestService testService;

	public void save() {
		testService.save();
		System.out.println("testController save");
	}
}

配置注解
因为annotation.controller、annotation.dao、annotation.service都属于annotation的子包,所以不需要再配置annotationContext.xml

测试

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import annotation.controller.TestController;

public class TestMoreAnnotation {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext xfc = new ClassPathXmlApplicationContext("annotationContext.xml");
		TestController testcon = (TestController) xfc.getBean("testController");
		testcon.save();
	}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值