Bean的装配方式
(一)
知识点:Spring容器支持多种形式的Bean的装配方式,比如基于XML的装配,基于注解的装配和自动装配(最常用的就是基于注解的装配)
Spring提供了两种基于xml的装配方式:设值注入(Setter Injection)和构造器注入(Construtor Injection)
1.InstanceTest.java
package com.inspur.assembling; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.inspur.static_factory.Bean2; public class InstanceTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String xmlPath = "com/inspur/assembling/bean1.xml";
//2.ApplicationContext 在加载文件时,对bean实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); System.out.println(applicationContext.getBean("user1"));
System.out.println(applicationContext.getBean("user2")); } }
2.User.java
package com.inspur.assembling; import java.util.List; public class User { //1.设值注入
//无参构造器
public User(){
}
private String username;
private Integer password;
private List<String> list;
//设置setter方法
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;
} //2.构造器注入
//有参数构造器
public User(String username, Integer password, List<String> list) {
super();
this.username = username;
this.password = password;
this.list = list;
}
public String toString(){
return "[User:username="+username+",password:"+password+",list:"+list+"]";
} }
3.bean1.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 设值注入 -->
<bean id="user1" class="com.inspur.assembling.User">
<property name="username" value="zhangsan"></property>
<property name="password" value="123"></property>
<property name="list">
<list>
<value>设值注入1</value>
<value>设值注入2</value>
<value>设值注入3</value>
</list>
</property>
</bean> <!-- 构造器注入 -->
<bean id="user2" class="com.inspur.assembling.User">
<constructor-arg index="0" value="lisi"></constructor-arg>
<constructor-arg index="1" value="456"></constructor-arg>
<constructor-arg index="2">
<list>
<value>构造器注入1</value>
<value>构造器注入2</value>
</list>
</constructor-arg>
</bean>
</beans>
(二)注解
1.InstanceTest.java
package com.inspur.zhujie1; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class InstanceTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String xmlPath = "com/inspur/zhujie1/bean.xml";
//2.ApplicationContext 在加载文件时,对bean实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
UserController userController = (UserController)applicationContext.getBean("UserController");
userController.save(); } }
2.UserController.java
package com.inspur.zhujie1; 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("UserController..save");
} }
3.UserDao.java
package com.inspur.zhujie1; public interface UserDao {
public void save(); }
3.UserDaoImpl.java
package com.inspur.zhujie1; import org.springframework.stereotype.Repository; @Repository("userDao")
public class UserDaoImpl implements UserDao{
public void save(){
System.out.println("UserDaoImpl.. save");
} }
4.UserService.java
package com.inspur.zhujie1; public interface UserService {
public void save(); }
5.UserServiceImpl.java
package com.inspur.zhujie1; import javax.annotation.Resource; import org.springframework.stereotype.Service; @Service("userService")
public class UserServiceImpl implements UserService{
@Resource(name="userDao")
private UserDao userdao;
public void save(){
userdao.save();
System.out.println("UserService...save..");
} }
6.bean.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 />
<!-- 使用Spring配合文件中的注解方式较大程度简化了Xml文件中的bean的配置,但仍然需要在spring文件中配置相应的bean -->
<!-- userDao -->
<!-- <bean id="userDao" class="com.inspur.annotation.UserDaoImpl"></bean>
<bean id="userService" class="com.inspur.annotation.UserServiceImpl"></bean>
<bean id="userController" class="com.inspur.annotation.UserController"></bean> -->
<!-- context空间下扫描组件 将指定包下的所有的Bean类,进行注解解析 -->
<context:component-scan base-package="com.inspur.zhujie1" />
</beans>
7.运行结果:
(四)自动注解
1.InstanceTest.java
package com.inspur.autozhujie; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class InstanceTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String xmlPath = "com/inspur/autozhujie/bean.xml";
//2.ApplicationContext 在加载文件时,对bean实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
UserController userController = (UserController)applicationContext.getBean("userController");
userController.save(); } }
2.UserController.java
package com.inspur.autozhujie; public class UserController { private UserService userService;
//为属性设置setter方法
public void setUserService(UserService userService){
this.userService=userService;
}
public void save(){
this.userService.save();
System.out.println("UserController..save");
} }
3.UserDao.java
package com.inspur.autozhujie; public interface UserDao {
public void save();
}
4.UserDaoImpl.java
package com.inspur.autozhujie; public class UserDaoImpl implements UserDao { public void save(){
System.out.println("UserDaoImpl.. save");
} }
5.UserService.java
package com.inspur.autozhujie; public interface UserService {
public void save();
}
6.UserServiceImpl.java
package com.inspur.autozhujie; public class UserServiceImpl implements UserService {
private UserDao userDao;
//为属性提供setter方法
public void setUserDao(UserDao userDao){
this.userDao=userDao;
}
public void save(){
userDao.save();
System.out.println("UserService...save..");
}
}
7.bean.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">
<!-- 使用bean元素的autowise属性完成自动装配 -->
<bean id="userDao" class="com.inspur.autozhujie.UserDaoImpl"></bean>
<bean id="userController" class="com.inspur.autozhujie.UserController" autowire="byName"></bean>
<bean id="userService" class="com.inspur.autozhujie.UserServiceImpl" autowire="byName" ></bean>
</beans>
Bean的装配方式的更多相关文章
- bean的装配方式(注入方式,构造注入,setter属性注入)
bean的装配方式有两种,构造注入和setter属性注入. public class User { private String username; private String password; ...
- Spring 中Bean的装配方式
最近又买了一本介绍SSM框架的书,是由黑马程序员编写的,书上讲的很好理解,边看边总结一下.主要总结一下bean的装配方式. Bean的装配可以理解为依赖系统注入,Bean的装配方式即Bean依赖注入的 ...
- Spring Bean 的装配方式
Spring Bean 的装配方式 装配 Bean 的三种方式 一个程序中,许多功能模块都是由多个为了实现相同业务而相互协作的组件构成的.而代码之间的相互联系又势必会带来耦合.耦合是个具有两面性的概念 ...
- 【Spring】Spring中的Bean - 5、Bean的装配方式(XML、注解(Annotation)、自动装配)
Bean的装配方式 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 文章目录 Bean的装配方式 基于XML的装配 基于注解 ...
- Spring中Bean的装配方式
一.基于xml的装配 Student.java package com.yh; public class Student implements People { public void breath( ...
- Spring框架(2)---IOC装配Bean(xml配置方式)
IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...
- 03_Spring Bean的装配模式_基于Annotation配置方式
前言 在Spring中尽管使用XML配置文件可以实现Bean的装配工作,但如果应用中Bean的数量较多,会导致XML配置文件过于臃肿,从而给维护和升级带来一定的困难.从JDK 5开始提供了名为Anno ...
- IOC装配Bean(XML方式)
Spring框架Bean实例化的方式 提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 无参数构造方法的实例化 <!-- 默认情况下使用的就是 ...
- Spring Bean装配方式
Spring装配机制 在xml中进行显示配置 在Java中进行显示配置 隐式bean发现机制和自动装配 自动化装配bean 组件扫描(component scanning),Spring会自动发现应用 ...
随机推荐
- lnmp重置mysql数据库root密码
第一种方法:用军哥的一键修改LNMP环境下MYSQL数据库密码脚本 一键脚本肯定是非常方便.具体执行以下命令: wget http://soft.vpser.net/lnmp/ext/reset_my ...
- Java Error: Failed to validate certificate. The application will not be executed
Hi, last week a customer had the problem that he wants to connect to the administration interface of ...
- RPC-Thrift(四)
Client Thrift客户端有两种:同步客户端和异步客户端. 同步客户端 同步客户端比较简单,以RPC-Thrift(一)中的的例子为基础进行研究源码,先看一下类图. TServiceClient ...
- bzoj1499: [NOI2005]瑰丽华尔兹&&codevs1748 单调队列优化dp
这道题 网上题解还是很多很好的 强烈推荐黄学长 码风真的好看 神犇传送门 学习学习 算是道单调队列优化dp的裸题吧 #include<cstdio> #include<cstring ...
- bzoj 1834
网络流的模板题 首先第一问我们直接用dinic搞就行了,费用直接存为0(时间上界非常松,这道题是能过),然后第二问我们只需要在第一问 的残余网络上加一个源点,源点指向1号点,容量为k,费用为0,然后对 ...
- 培训补坑(day10:双指针扫描+矩阵快速幂)
这是一个神奇的课题,其实我觉得用一个词来形容这个算法挺合适的:暴力. 是啊,就是循环+暴力.没什么难的... 先来看一道裸题. 那么对于这道题,显然我们的暴力算法就是枚举区间的左右端点,然后通过前缀和 ...
- linux下bus、devices和platform的基础模型 【转】
转自:http://blog.chinaunix.net/uid-20672257-id-3147337.html 一.kobject的定义:kobject是Linux2.6引入的设备管理机制,在内核 ...
- heightCharts改变图表内图标的样式:链接外部图片
series: [{ name: '东京', marker: { symbol: 'url(https://www.highcharts.com/demo/gfx/sun.png)' //链接 ...
- C#格式化时间,货币
1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...
- Django-ContentType
背景:学位课.专题课.价格策略(每一种课程(学位课和专题课下可分为不同的种类的课程)在不同学习时间内的价格不同) 例如:如何将课程表与价格策略表关联起来: 用外键是可以将课程表和价格策略表关联起来的, ...