Spring Bean装载方式代码实例解析
这篇文章主要介绍了Spring Bean装载方式代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Bean的装配方式
Bean的装配可以理解为依赖关系注入
基于XML的装配
a) 设值注入
i.要求:
- Bean 类必须提供一个默认的无参构造方法。
- Bean 类必须为需要注入的属性提供对应的setter方法。
b) 构造注入
package com.itheima.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(){
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(Integer password) {
this.password = password;
}
public void setList(List<String> list) {
List = list;
}
@Override
/*
* (non-Javadoc)
* @see java.lang.Object#toString()
* 为了输出是看到结果,重写toString()方法
*/
public String toString() {
return "User [username=" + username + ", password=" + password + ", List=" + List + "]";
}
}
<?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.xsd">
<!-- 1.使用构造注入方式装配User实例 -->
<bean id="user1" class="com.itheima.assemble.User">
<constructor-arg index="0" value="tom"></constructor-arg>
<constructor-arg index="1" value="123456"></constructor-arg>
<constructor-arg index="2">
<list>
<value>"constructorvalue1"</value>
<value>"constructorvalue2"</value>
</list>
</constructor-arg>
</bean>
<!-- 2.使用设值注入装配User实例 -->
<bean id="user2" class="com.itheima.assemble.User">
<property name="username" value="张三"></property>
<property name="password" value="654321"></property>
<!-- 注入list集合 -->
<property name="list">
<list>
<value>"setlistvalue1"</value>
<value>"setlistvalue2"</value>
</list>
</property>
</bean>
</beans>
<constructor -arg >元素用于定义构造方法的参数,子元素<Iist>来为Use r 类中对应的list集合属性注入值。
其中<property>元素用于调用Bean实例中的setter方法完成属性赋值,从而完成依赖注入。
package com.itheima.assemble;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class XmlBeanAssembleTest {
public static void main(String[] args) {
//定义配置文件路径
String xmlPath = "com/itheima/assemble/beans5.xml";
//加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
//构造方式输出结果
System.out.println("构造方式:");
System.out.println(applicationContext.getBean("user1"));
//设值方式输出结果
System.out.println("设值方式:");
System.out.println(applicationContext.getBean("user2"));
}
}

2.基于Annotation的装配
package com.itheima.annotation;
public interface UserDao {
public void save();
}
package com.itheima.annotation;
import org.springframework.stereotype.Repository;
@Repository("userDao")
public class UserDaoImpl implements UserDao{
public void save(){
System.out.println("userdao...save...");
}
}
先使用@Repository 注解将UserDaolmpl 类标识为Spring 中的Bean,其写法相当于配置文件中<bean id="userDao" class="com.itheima.annotation.UserDaolmpl"/>
package com.itheima.annotation;
public interface UserService {
public void save();
}
package com.itheima.annotation;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl implements UserService{
@Resource(name="userDao")
private UserDao userDao;
@Override
public void save() {
// TODO Auto-generated method stub
//调用userDao中的save()方法
this.userDao.save();
System.out.println("userservice...save...");
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
@Service 注解将UserServicelmpl 类标识为Spring中的Bean,这相当于配置文件中<bean id="userService" class="com.itheima.annotation.UserServicelmpl”/> 的编写;然后使用@Resource 注解标注在属性userDao上,这相当于配置文件中<property name="userDao" ref="userDao“/>的写法。
package com.itheima.annotation;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
@Controller("userController")
public class UserController {
@Resource(name="userService")
private UserService userService;
public void save(){
this.userService.save();
System.out.println("userControlle...save...");
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
Controller 注解标注了UserController 类,这相当于在配置文件中编写<bean id="userControll er" class="com .itheima.annotation.UserController"/>; 然后使用了@Resource 注解标注在userService 属性上,这相当于在配置文件中编写<propertyname="userService" ref="userService" />
<?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:component-scan base-package="com.itheima.annotation"></context:component-scan>
</beans>
package com.itheima.annotation;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AnnotationAssembleTest {
public static void main(String[] args) {
String xmlPath = "com/itheima/annotation/beans6.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
//获取UserController实例
UserController userController = (UserController)applicationContext.getBean("userController");
//调用UserController中的save()方法
userController.save();
}
}

3.自动装配
<?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">
<!-- 使用bean元素的autowire属性完成自动装配 -->
<bean id="userDao" class="com.itheima.annotation.UserDaoImpl"></bean>
<bean id="userService" class="com.itheima.annotation.UserServiceImpl" autowire="byName"></bean>
<bean id="userController" class="com.itheima.annotation.UserController" autowire="byName"></bean>
</beans>
增加了autowire 属性,并将其属性值设置为byName 。在默认情况下,配置文件中需要通过ref 来装配Bean ,但设置了autowire=" byName"后,Spring 会自动寻找userServiceBean 中的属性,并将其属性名称与配置文件中定义的Bean 做匹配。由于UserServicelmpl 中定义了userDao 属'性及其setter 方法,这与配置文件中id 为userDao 的Bean 相匹配,所以Spring会自动地将id 为userDao 的Bean 装配到id 为userService 的Bean 中。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
微服务 Spring Boot 整合 Redis BitMap 实现 签到与统计功能
这篇文章主要介绍了微服务 Spring Boot 整合 Redis BitMap 实现 签到与统计功能,文章简单介绍了Redis BitMap 基本用法结合实例代码给大家介绍的非常详细,需要的朋友可以参考下2023-01-01


最新评论