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会自动发现应用 ...
随机推荐
- 【BZOJ1419】 Red is good [期望DP]
Red is good Time Limit: 10 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 桌面上有R张红牌和B张 ...
- 【BZOJ1468】Tree [点分治]
Tree Time Limit: 10 Sec Memory Limit: 64 MB[Submit][Status][Discuss] Description 给你一棵TREE,以及这棵树上边的距 ...
- 汕头市队赛 C KMP codeforces B. Image Preview
汕头市队赛题目传送门 codeforces题目传送门 这道题我的做法是 尝试先往左走然后往右走 或者先往右走然后往左走 然后注意一下枚举顺序就okay啦 #include<cstdio> ...
- 1210笔记//关于导航实例-QQ空间//导航实例-storyboard实现//控制器的生命周期//控制器的生命周期方法
一.利用storyboard完成导航1.storyboard中用来跳转的每一根线 都是 一个 UIStoryboardSegue对象1> 自动跳转 (从 某个按钮 拖线到 下一个目的控制器) ...
- guake终端复制标签页
平时习惯用的终端是下拉式终端guake,开多个标签各司其职,热键一按,呼之即来,挥之即去. 但用一个东西,就难免会有不爽的地方,比如每次想复制一个标签页,就要3步,1 新建标签页, 2 切换到之前的路 ...
- 别再滥用scrapy CrawlSpider中的follow=True
对于刚接触scrapy的同学来说, crawlspider中的rule是比较难理解的, 很可能驾驭不住. 而且笔者在YouTube中看到许多公开的演讲都都错用了follow这一选项, 所以今天就来仔细 ...
- Mac-sublime text 3破解版
在史蒂芬周下载破解版 安装package control import urllib.request,os,hashlib; h = 'df21e130d211cfc94d9b0905775a7c0f ...
- Selenium2+python自动化68-html报告乱码问题【转载】
前言 python2用HTMLTestRunner生成测试报告时,有中文输出情况会出现乱码,这个主要是编码格式不统一,改下编码格式就行. 下载地址:http://tungwaiyip.info/sof ...
- Android 开发实用方法大全
1.格式化价格,这个经常在计算费用精度的时候用到 /** * 格式化价格 * * @param argStr 传入价格字符串 * @return */ public static String get ...
- ModelMap和ModelAndView区别
首先介绍ModelMap和ModelAndView的作用 ModelMap ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可 ...