原文链接: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、集合注入、自动装配、生命周期相关推荐

  1. spring学习之将类交给spring管理,bean的注入,scope,集合注入,自动装配,生命周期,迟加载

    一.将类交给spring管理(IOC) 1.将类交给spring容器管理 如何将一个类交给spring容器进行管理呢? 方法很简单,只需要在applicationContext.xml中加入对应的xm ...

  2. Spring -- 入门,装备集合,自动装配,分散装配,自定义编辑器

    1. 概要 struts2:web hibernate:持久化 spring:业务层.管理bean的,容器.List Map Set.体验spring:1.创建java项目.2.引入spring的类库 ...

  3. Spring 框架基础(02):Bean的生命周期,作用域,装配总结

    本文源码:GitHub·点这里 || GitEE·点这里 一.装配方式 Bean的概念:Spring框架管理的应用程序中,由Spring容器负责创建,装配,设置属性,进而管理整个生命周期的对象,称为B ...

  4. Spring(三)之自动装配、表达式

    自动装配 例子 byName byType 将bean排除在自动装配之外 依赖检查 spring表达式 自动装配 自动装配(autowire)协作者 Spring IoC容器可以自动装配(autowi ...

  5. Spring实战(六)自动装配的歧义性

    1.Spring进行自动装配时碰到的bean歧义性问题. 在进行自动装配时,只有仅有一个bean匹配所需结果时,才是可行的. 如果不仅仅一个bean能够匹配结果,例如一个接口有多个实现,这种歧义性会阻 ...

  6. Spring学习(五)—— 自动装配

    自动装配 搭建环境 首先,搭建环境 Cat.java package com.zhang.bean;/*** @title: Cat* @Author 张宜强* @Date: 2021/7/22 11 ...

  7. Spring容器父子类继承关系交给spring容器管理采用@autowired自动装配分析

    第一个青春是上帝给的 第二个的青春是靠自己努力的. 在开发项目过程中开发者们可能会遇到这样的问题 @autowired自动装配模式的工作模式是:在springIOC定位所有的Bean后,这个字段需要按 ...

  8. Java(Spring)学习笔记--->自动装配(autowire)

    这篇文章笔者和大家聊一聊自动装配,首先我们学习它的时候我们应该知道何为自动装配? 举个例子:一个人他有一只狗和一只猫,他有的 这两个动物就相当于这个人的名字一样,写在一个personn类中并且生成无参 ...

  9. 【Spring Boot】条件化自动装配

    [引言] 在前面的博客中,了解了Spring Boot的自动装配是如何实现的,这只是一个基础,对于自动装配,更专业的使用是可以做到条件化自动装配. [条件注解] Spring Boot中,提供了以下条 ...

最新文章

  1. C#学习(6)——LINQ学习
  2. centos7 菜鸟第一天--输入法在哪
  3. Tensorflow Estimator之DNNClassifier
  4. 单片机c语言表达式,单片机C语言教程-运算符和表达式
  5. svn插件下载地址(用于eclipse、myeclipse的svn插件)
  6. 网盘助手插件chrome插件
  7. 项目实战:Qt+OpenCV激光射击游戏(识别激光、识别圆)
  8. 计算机网络:第四章 网络层
  9. inno setup制作的安装包,安装后以管理员身份启动
  10. c语言程序答案PDF,C语言程序设计答案.pdf
  11. uniapp连接手机端调试
  12. word文档中如何让正文分栏但是脚注不分栏
  13. 如何整合润乾报表到spring boot项目
  14. NLP_task4文本表示_CBOW和Skip-gram模型
  15. 计算机基础运用知识woord,《计算机基础知识word.doc
  16. 【信息系统项目管理师】信息系统主流开发方法之结构化方法、面向对象方法和原型法总结
  17. 【转】好资料,非常棒!!!
  18. 大一寒假培训(七)——队列与优先队列
  19. 盘点:三十五个非主流开源数据库
  20. 【JavaScript】JS取余及取商(一)

热门文章

  1. 牛客练习赛26B 烟花 (概率DP)
  2. Promise 的基础用法
  3. vue项目条形码和二维码生成工具试用
  4. 通过带数据盘的自定义镜像来创建使用应用程序网关的虚拟机规模集
  5. 值类型和引用类型---深究
  6. Web内容管理系统 Magnolia 启程-挖掘优良的架构(3)
  7. WPF LibraryBar去背景色
  8. Wing IDE 4.1破解教程
  9. oracle biee
  10. mfc编程消息机制中消息汇总