本篇内容主要讲解“Spring中Bean的装配方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring中Bean的装配方法是什么”吧!
Bean的装配可以理解为依赖关系注入,Bean的装配方式即Bean依赖注入的方式。Spring容器支持多种形式的Bean的装配方式,如基于XML的装配、基于注解(Annotation)的装配和自动装配(其中最常用的是基于注解的装配),本文章将主要讲解着三种装配方式的使用。
条件:①Bean类必须有一个无参构造方法;②Bean类必须为属性提供setter方法。
在配置文件中,使用<property>元素来为每个属性注入值
条件:Bean类必须提供有参构造方法
在配置文件中,使用<constructor-arg>元素来为参数注入值
创建Java类User,提供有参、无参构造方法以及属性setter方法;
package com.ssm.assemble;
import java.util.List;
public class User {
private String username;
private Integer password;
private List<string> list;
/**
* 1.使用构造注入
* 1.1提供带所有参数的有参构造方法。
*/
public User(String username, Integer password, List<string> list) {
super();
this.username = username;
this.password = password;
this.list = list;
}
/**
* 2.使用设值注入
* 2.1提供默认空参构造方法 ;
* 2.2为所有属性提供setter方法。
*/
public User() {
super();
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(Integer password) {
this.password = password;
}
public void setList(List<string> list) {
this.list = list;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password +
", list=" + list + "]";
}
}
创建Spring配置文件beans1.xml,使用以上两种方式装配Bean;
<!--?xml version="1.0" encoding="UTF-8"?-->
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<!--1.使用构造注入方式装配User实例 -->
<bean id="user1" class="com.ssm.assemble.User">
<constructor-arg index="0" value="小红" />
<constructor-arg index="1" value="987654" />
<constructor-arg index="2">
<list>
<value>"constructorvalue1"</value>
<value>"constructorvalue2"</value>
</list>
</constructor-arg>
</bean>
<!--2.使用设值注入方式装配User实例 -->
<bean id="user2" class="com.ssm.assemble.User">
<property name="username" value="小明"></property>
<property name="password" value="123456"></property>
<!-- 注入list集合 -->
<property name="list">
<list>
<value>"setlistvalue1"</value>
<value>"setlistvalue2"</value>
</list>
</property>
</bean>
</beans>
创建测试类XmlBeanAssembleTest,测试程序;
package com.ssm.assemble;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class XmlBeanAssembleTest {
public static void main(String[] args) {
// 定义配置文件路径
String xmlPath = "beans1.xml";
// 加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
// 构造方式输出结果
System.out.println(applicationContext.getBean("user1"));
// 设值方式输出结果
System.out.println(applicationContext.getBean("user2"));
}
}
运行效果。
由于基于XML的装配可能会导致XML配置文件过于臃肿,给后续的维护和升级带来一定的困难。因此,Spring提供了对Annotation(注解)技术的全面支持。
创建数据访问(Dao)层接口UserDao;
package com.ssm.annotation;
public interface UserDao {
public void save();
}
创建数据访问(UserDao)层接口的实现类UserDaoImpl,并且在实现类前添加对应的注解@Repository("userDao");
package com.ssm.annotation;
import org.springframework.stereotype.Repository;
@Repository("userDao")
//@Repository("userDao")相当于配置文件中的:<bean id="userDao" class="com.ssm.annotation.UserDaoImpl" />
public class UserDaoImpl implements UserDao{
@Override
public void save() {
System.out.println("userdao...save...");
}
}
创建业务(Service)层接口UserService;
package com.ssm.annotation;
public interface UserService {
public void save();
}
创建业务(Service)层接口的实现类UserServiceImpl并添加属性对象UserDao的setter方法,并在实现类前添加对应的注解@Service("userService")和在类里面方法前添加对应的注解 @Resource(name="userDao");
package com.ssm.annotation;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
@Service("userService")
//相当于配置文件中的:<bean id="userService" class="com.ssm.annotation.UserServiceImpl" />
public class UserServiceImpl implements UserService{
@Resource(name="userDao")
//当于配置文件中的:<property name="userDao" ref="userDao" />
private UserDao userDao;
public void save() {
//调用userDao中的save方法
this.userDao.save();
System.out.println("userservice....save...");
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
创建控制(Controller)层Java类UserController,并在实现类前添加对应的注解@Controller("userController")和在类里面方法前添加对应的注解 @Resource(name="userService");
package com.ssm.annotation;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
@Controller("userController")
//相当于配置文件中的:<bean id="userController" class="com.ssm.annotation.UserController" />
public class UserController {
@Resource(name="userService")
//当于配置文件中的:<property name="userService" ref="userService" />
private UserService userService;
public void save(){
this.userService.save();
System.out.println("userController...save...");
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
创建Spring配置文件beans2.xml,开启注解和定义Bean;
<!--?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" xsi:schemalocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 使用 context 命名空间 ,在配置文件中开启相应的注解处理器 -->
<context:annotation-config />
<!--使用 context 命名空间 ,通知Spring扫描指定包下所有Bean类,进行注解解析-->
<context:component-scan base-package="com.ssm.annotation" />
</beans>
创建测试类AnnotationAssembleTest,测试程序;
package com.ssm.annotation;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AnnotationAssembleTest {
public static void main(String[] args) {
// 定义配置文件路径
String xmlPath = "beans2.xml";
// 加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
// 获取UserController实例
UserController userController = (UserController) applicationContext.getBean("userController");
// 调用UserController中的save()方法
userController.save();
}
}
运行效果。
所谓自动装配,就是将一个Bean自动的注入到到其他Bean的Property中。 Spring的<bean>元素中包含一个autowire属性,我们可以通过设置autowire的属性值来自动装配Bean。autowire属性有5个值,其值及说明下表所示:
这里只需要在基于注解的装配配置文件(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:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 使用 context 命名空间 ,在配置文件中开启相应的注解处理器 -->
<!--<context:annotation-config />-->
<!--<!–分别定义3个Bean实例 –>-->
<!--<bean id="userDao" class="com.ssm.annotation.UserDaoImpl" />-->
<!--<bean id="userService" class="com.ssm.annotation.UserServiceImpl" />-->
<!--<bean id="userController" class="com.ssm.annotation.UserController" />-->
<!--<!–使用 context 命名空间 ,通知Spring扫描指定包下所有Bean类,进行注解解析–>-->
<!--<context:component-scan base-package="com.ssm.annotation" />-->
<!-- 使用bean元素的autowire属性完成自动装配 -->
<bean id="userDao" class="com.ssm.annotation.UserDaoImpl" />
<bean id="userService" class="com.ssm.annotation.UserServiceImpl" autowire="byName" />
<bean id="userController" class="com.ssm.annotation.UserController" autowire="byName" />
</beans>
运行效果和基于注解的装配一样
到此,相信大家对“Spring中Bean的装配方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4157164/blog/3075467