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会自动发现应用 ...
随机推荐
- vue与node模版引擎的渲染标记{{}}(双花括号)冲突
由于之前练习koa2,直接渲染的jquery写的传统页面. 这次想偷懒,直接script引入vue,发现渲染不出data值. 渲染引擎用得是xtpl, 找了半天没有发现可以修改xtpl渲染分隔符的配置 ...
- xcode 10 出现 :-1: Multiple commands produce '/Users/.../Library/Developer/Xcode/DerivedData/.../Build/Products/Dev-iphonesimulator/TLYShyNavBar/TLYShyNavBar.framework/Info.plist': 1) Target 'TLYShyNavB
错误提示如下: :-1: Multiple commands produce '/Users/.../Library/Developer/Xcode/DerivedData/.../Build/Pro ...
- Git菜鸟
1.git 和svn的差异 git和svn 最大的差异在于git是分布式的管理方式而svn是集中式的管理方式.如果不习惯用代码管理工具,可能比较难理解分布式管理和集中式管理的概念.下面介绍两种工具的工 ...
- vivo面试学习3(git和svn的区别)
git和svn有什么区别? svn: 系统特点: 1).集中式版本控制系统(存在一个中央版本库,所有开发人员所使用的代码都是来源于版本库,提交代码也是这个中央版本库) 2).企业内部并行集中开发 3) ...
- SpringMVC异常报406 (Not Acceptable)的解决办法
使用SpsringMVC,使用restEasy调试,controller请求设置如下: @RequestMapping(value="/list",method=RequestMe ...
- [Codevs1519]过路费解题报告|最小生成树|LCA
在某个遥远的国家里,有 n个城市.编号为 1,2,3,…,n.这个国家的政府修建了m 条双向道路,每条道路连接着两个城市.政府规定从城市 S 到城市T需要收取的过路费为所经过城市之间道路长度的最大值. ...
- bzoj 1433 二分图匹配
裸地匈牙利或者最大流,直接匹配就行了 需要注意的是(我就没注意细节WA了好多次...) 每个人和自己之间的边是0,但是应该是1 不是在校生是没有床的.... /******************** ...
- eclipse使用git下载项目
准备工作: 目的:从远程仓库github上down所需的项目 eclipse使用Git插件下载github上项目 eclipse版本:eclipse4.5 64位 jdk版本:jdk-1.7 64位 ...
- python学习 - yield
def myYield2(): for i in range(3): yield '2222 i am in myYield2', 'i = ', i def myYield(): for i in ...
- yum软件包安装
使用yum安装软件 配置yum配置文件 cd /etc/yum.repos.d/ vim rhel7.repo [rhel7-source] name=rhel7-source baseurl=fil ...