Spring(二)scope、集合注入、自动装配、生命周期
原文链接:http://www.orlion.ga/189/
一、scope
bean的scope属性中常用的有两种:singleton(单例,默认)和prototype(原型,每次创建新对象)
例:beans.xml
<bean id="userService" class="ml.orlion.service.UserService" scope="prototype"><property name="userDao" ref="userDao"/> </bean>
在java文件中:
BeanFactory appContext = new ClassPathXmlApplicationContext("beans.xml");
UserService userService = (UserService)appContext.getBean("userService");
UserService userServic2 = (UserService)appContext.getBean("userService");
System.out.println(userService == userServic2);// 输出false
二、集合注入
UserDAOImpl.java:
package ml.orlion.dao.impl;import java.util.List;
import java.util.Map;
import java.util.Set;
import ml.orlion.dao.UserDAO;
import ml.orlion.model.User;public class UserDAOImpl implements UserDAO{private Set<String> sets;private List<String> lists;private Map<String , String> maps;public void saveUser(User user){System.out.println("save usering");}public Set<String> getSets() {return sets;}public void setSets(Set<String> sets) {this.sets = sets;}public List<String> getLists() {return lists;}public void setLists(List<String> lists) {this.lists = lists;}public Map<String, String> getMaps() {return maps;}public void setMaps(Map<String, String> maps) {this.maps = maps;}public String toString(){return sets.size() +"|"+ lists.size() +"|"+ maps.size();}
}
beans.xml中配置:
<bean id="userDao" class="ml.orlion.dao.impl.UserDAOImpl"><property name="sets"><set><value>1</value></set></property><property name="lists"><list><value>1</value><value>2</value></list></property><property name="maps"><map><entry key="1" value="1"></entry><entry key="2" value="2"></entry><entry key="3" value="3"></entry></map></property></bean>
然后测试一下:
BeanFactory appContext = new ClassPathXmlApplicationContext("beans.xml");
UserDAO userDao = (UserDAO) appContext.getBean("userDao");
System.out.println(userDao);// 输出 1|2|3
三、自动装配AutoWire
autowire属性有六种值:autodatact、byName、byType、constructor、default、no
byName:按照名字自动去匹配
byType:按照类型自动匹配
UserDAOImpl.java:
package ml.orlion.dao.impl;import ml.orlion.dao.UserDAO;
import ml.orlion.model.User;public class UserDAOImpl implements UserDAO{// 添加id以区分private int daoId;public int getDaoId() {return daoId;}public void setDaoId(int daoId) {this.daoId = daoId;}public void saveUser(User user){System.out.println("save usering");}public String toString(){return "daoId" + daoId;}
}
beans.xml:
<bean id="userDao" class="ml.orlion.dao.impl.UserDAOImpl"><property name="daoId" value="1"></property></bean><bean id="userDao2" class="ml.orlion.dao.impl.UserDAOImpl"><property name="daoId" value="2"></property></bean><bean id="userService" class="ml.orlion.service.UserService" scope="prototype" autowire="byName"></bean>
测试一下:
BeanFactory appContext = new ClassPathXmlApplicationContext("beans.xml");
UserService userService = (UserService) appContext.getBean("userService");
System.out.println(userService.getUserDao());
这时候会输出daoId=1
注:如果所有的bean都用同一种,可以使用beans的属性:defalut-autowire
四、生命周期
1、lazy-init
lazy-init="true"则bean在Ioc容器初始化的时候不进行初始化
注:可以beans标签上设置default-lazy-init="true"
2、init-method(bean初始化的时候执行)、destroy-method(bean销毁的时候执行)
UserService.java
package ml.orlion.service;import ml.orlion.dao.UserDAO;
import ml.orlion.dao.impl.UserDAOImpl;
import ml.orlion.model.User;public class UserService {private UserDAO userDAO = new UserDAOImpl();public void init(){System.out.println("init");}public void destroy(){System.out.println("destroy");}public UserDAO getUserDao() {return userDAO;}public void setUserDao(UserDAO userDAO) {this.userDAO = userDAO;}public void saveUser(User user){this.userDAO.saveUser(user);}
}
beans.xml:
<bean id="userDao" class="ml.orlion.dao.impl.UserDAOImpl"><property name="daoId" value="1"/></bean><bean id="userService" class="ml.orlion.service.UserService" destroy-method="destroy" init-method="init"><property name="userDao" ref="userDao"/></bean>
测试:
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext("beans.xml"); UserService userService = (UserService) appContext.getBean("userService"); appContext.destroy();// 需要主动调用该方法才会销毁bean
注:scope="prototype"时,调用destroy不会销毁bean。Ioc容器不会管理bean的生命周期
转载于:https://www.cnblogs.com/orlion/p/5350854.html
Spring(二)scope、集合注入、自动装配、生命周期相关推荐
- spring学习之将类交给spring管理,bean的注入,scope,集合注入,自动装配,生命周期,迟加载
一.将类交给spring管理(IOC) 1.将类交给spring容器管理 如何将一个类交给spring容器进行管理呢? 方法很简单,只需要在applicationContext.xml中加入对应的xm ...
- Spring -- 入门,装备集合,自动装配,分散装配,自定义编辑器
1. 概要 struts2:web hibernate:持久化 spring:业务层.管理bean的,容器.List Map Set.体验spring:1.创建java项目.2.引入spring的类库 ...
- Spring 框架基础(02):Bean的生命周期,作用域,装配总结
本文源码:GitHub·点这里 || GitEE·点这里 一.装配方式 Bean的概念:Spring框架管理的应用程序中,由Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为B ...
- Spring(三)之自动装配、表达式
自动装配 例子 byName byType 将bean排除在自动装配之外 依赖检查 spring表达式 自动装配 自动装配(autowire)协作者 Spring IoC容器可以自动装配(autowi ...
- Spring实战(六)自动装配的歧义性
1.Spring进行自动装配时碰到的bean歧义性问题. 在进行自动装配时,只有仅有一个bean匹配所需结果时,才是可行的. 如果不仅仅一个bean能够匹配结果,例如一个接口有多个实现,这种歧义性会阻 ...
- Spring学习(五)—— 自动装配
自动装配 搭建环境 首先,搭建环境 Cat.java package com.zhang.bean;/*** @title: Cat* @Author 张宜强* @Date: 2021/7/22 11 ...
- Spring容器父子类继承关系交给spring容器管理采用@autowired自动装配分析
第一个青春是上帝给的 第二个的青春是靠自己努力的. 在开发项目过程中开发者们可能会遇到这样的问题 @autowired自动装配模式的工作模式是:在springIOC定位所有的Bean后,这个字段需要按 ...
- Java(Spring)学习笔记--->自动装配(autowire)
这篇文章笔者和大家聊一聊自动装配,首先我们学习它的时候我们应该知道何为自动装配? 举个例子:一个人他有一只狗和一只猫,他有的 这两个动物就相当于这个人的名字一样,写在一个personn类中并且生成无参 ...
- 【Spring Boot】条件化自动装配
[引言] 在前面的博客中,了解了Spring Boot的自动装配是如何实现的,这只是一个基础,对于自动装配,更专业的使用是可以做到条件化自动装配. [条件注解] Spring Boot中,提供了以下条 ...
最新文章
- C#学习(6)——LINQ学习
- centos7 菜鸟第一天--输入法在哪
- Tensorflow Estimator之DNNClassifier
- 单片机c语言表达式,单片机C语言教程-运算符和表达式
- svn插件下载地址(用于eclipse、myeclipse的svn插件)
- 网盘助手插件chrome插件
- 项目实战:Qt+OpenCV激光射击游戏(识别激光、识别圆)
- 计算机网络:第四章 网络层
- inno setup制作的安装包,安装后以管理员身份启动
- c语言程序答案PDF,C语言程序设计答案.pdf
- uniapp连接手机端调试
- word文档中如何让正文分栏但是脚注不分栏
- 如何整合润乾报表到spring boot项目
- NLP_task4文本表示_CBOW和Skip-gram模型
- 计算机基础运用知识woord,《计算机基础知识word.doc
- 【信息系统项目管理师】信息系统主流开发方法之结构化方法、面向对象方法和原型法总结
- 【转】好资料,非常棒!!!
- 大一寒假培训(七)——队列与优先队列
- 盘点:三十五个非主流开源数据库
- 【JavaScript】JS取余及取商(一)