简单写一个类做示例:

package bean;public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

View Code

Bean元素:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "><!-- 将User对象交给spring容器管理 --><!-- Bean元素:使用该元素描述需要spring容器管理的对象class属性:被管理对象的完整类名.name属性:给被管理的对象起个名字.获得对象时根据该名称获得对象.  可以重复.可以使用特殊字符.id属性: 与name属性一模一样. 名称不可重复.不能使用特殊字符.结论: 尽量使用name属性.--><bean  name="user" class="bean.User" ></bean><!-- 导入其他spring配置文件 --><import resource="package/applicationContext.xml"/></beans>

对象创建的三种方式:

1.空参构造创建(推荐):

    <bean  name="user" class="bean.User" ></bean>

2.静态工厂方式创建:

package create;import bean.User;public class UserFactory {public static User createUser(){System.out.println("静态工厂创建User");return new User();}
}

    <!-- 创建方式2:静态工厂创建 调用UserFactory的createUser方法创建名为user2的对象.放入容器--><bean  name="user2" class="create.UserFactory" factory-method="createUser" ></bean>

3.实例工厂方式创建:

package create;import bean.User;public class UserFactory {public User createUser2(){System.out.println("实例工厂创建User");return new User();}}

    <!-- 创建方式3:实例工厂创建 调用UserFactory对象的createUser2方法创建名为user3的对象.放入容器--><bean  name="user3" factory-bean="userFactory"factory-method="createUser2" ></bean><bean  name="userFactory" class="create.UserFactory"   ></bean>

Bean元素的Scope属性:

scope:singleton 单例(默认):被标识为单例的对象在Spring容器中只会创建一个实例
scope:prototype 多例:被标识为多例的每次创建都会是一个新的对象

验证单例和多例:

                @Test//scope:singleton 单例//scope:prototype 多例public void fun4(){//1 创建容器对象ApplicationContext ac = new ClassPathXmlApplicationContext("create/applicationContext.xml");//2 向容器"要"user对象User u1 = (User) ac.getBean("user");User u2 = (User) ac.getBean("user");User u3 = (User) ac.getBean("user");User u4 = (User) ac.getBean("user");System.out.println(u2==u4);//单例:true//多例:false//3 打印user对象
                    System.out.println(u);}

使用场景:基本都是使用默认单例

但是,整合Struts2框架的时候,Action要配成多例,因为Struts2框架每次请求都会创建一个新的Action对象

生命周期属性(初始化,销毁):

添加方法:

package bean;public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public void init(){System.out.println("初始化方法!");}public void destory(){System.out.println("销毁方法!");}}

View Code

配置文件:

    <bean  name="user" class="bean.User"init-method="init" destroy-method="destory" ></bean>

测试:

                @Test//测试生命周期方法public void fun5(){//1 创建容器对象ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("create/applicationContext.xml");//2 向容器"要"user对象User u = (User) ac.getBean("user");//3 打印user对象
                    System.out.println(u);//关闭容器,触发销毁方法
                    ac.close();}

Spring属性注入:

1.set方法注入(推荐):

再创建一个实体类做示例:

package bean;public class Car {private String  name;private String color;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}@Overridepublic String toString() {return "Car [name=" + name + ", color=" + color + "]";}}

View Code

修改User类:

package bean;public class User {private String name;private Integer age;private Car car;public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public void init(){System.out.println("我是初始化方法!");}public void destory(){System.out.println("我是销毁方法!");}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", car=" + car + "]";}}

View Code

配置文件:

    <!-- set方式注入: --><bean name="user" class="bean.User"><!--值类型注入: 为User对象中名为name的属性注入tom作为值 --><property name="name" value="tom"></property><property name="age" value="18"></property><!-- 引用类型注入: 为car属性注入下方配置的car对象 --><property name="car" ref="car"></property></bean><!-- 将car对象配置到容器中 --><bean name="car" class="bean.Car"><property name="name" value="兰博基尼"></property><property name="color" value="黄色"></property></bean>

测试:

    @Testpublic void fun1(){//1 创建容器对象ApplicationContext ac = new ClassPathXmlApplicationContext("injection/applicationContext.xml");//2 向容器"要"user对象User u = (User) ac.getBean("user");//3 打印user对象
        System.out.println(u);}

构造函数注入:

给User加上构造方法:

package bean;public class User {private String name;private Integer age;private Car car;public User(String name, Car car) {System.out.println("User(String name, Car car)!!");this.name = name;this.car = car;}public User(Car car,String name) {System.out.println("User(Car car,String name)!!");this.name = name;this.car = car;}public User(Integer name, Car car) {System.out.println("User(Integer name, Car car)!!");this.name = name+"";this.car = car;}public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public void init(){System.out.println("我是初始化方法!");}public void destory(){System.out.println("我是销毁方法!");}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", car=" + car + "]";}}

View Code

配置文件:

    <bean name="user2" class="bean.User"><!-- name属性: 构造函数的参数名 --><!-- index属性: 构造函数的参数索引 --><!-- type属性: 构造函数的参数类型 --><constructor-arg name="name" index="0" type="java.lang.Integer" value="66"></constructor-arg><constructor-arg name="car" ref="car" index="1"></constructor-arg></bean>

复杂类型注入:

package injection;import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;public class CollectionBean {private Object[] arr;//数组类型注入private List list;//list/set 类型注入private Map map;//map类型注入private Properties prop;//properties类型注入public Object[] getArr() {return arr;}public void setArr(Object[] arr) {this.arr = arr;}public List getList() {return list;}public void setList(List list) {this.list = list;}public Map getMap() {return map;}public void setMap(Map map) {this.map = map;}public Properties getProp() {return prop;}public void setProp(Properties prop) {this.prop = prop;}@Overridepublic String toString() {return "CollectionBean [arr=" + Arrays.toString(arr) + ", list=" + list + ", map=" + map + ", prop=" + prop+ "]";}}

View Code

配置文化:

    <!-- 复杂类型注入 --><bean name="cb" class="injection.CollectionBean"><!-- 如果数组中只准备注入一个值(对象),直接使用value|ref即可 <property name="arr" value="tom"></property> --><!-- array注入,多个元素注入 --><property name="arr"><array><value>tom</value><value>jerry</value><ref bean="user" /></array></property><property name="list"><list><value>jack</value><value>rose</value><ref bean="user" /></list></property><!-- map类型注入 --><property name="map"><map><entry key="url" value="jdbc:mysql:///mybase"></entry><entry key="user" value-ref="root"></entry><entry key-ref="user" value-ref="user1"></entry></map></property><!-- prperties 类型注入 --><property name="prop"><props><prop key="driverClass">com.jdbc.mysql.Driver</prop><prop key="userName">root</prop><prop key="password">1234</prop></props></property></bean>

转载于:https://www.cnblogs.com/xuyiqing/p/8462286.html

spring框架学习笔记2:配置详解相关推荐

  1. ELK学习笔记之Logstash详解

    0x00 Logstash概述 官方介绍:Logstash is an open source data collection engine with real-time pipelining cap ...

  2. Spring框架学习笔记,超详细!!(4)

    Java小白开始学习Spring框架,一方面,跟着视频学习,并记录下学习笔记,方便以后复习回顾.另一方面,发布学习笔记来约束自己,学习路程还很遥远,继续加油坚持!!!希望能帮助到大家! 另外还有我的牛 ...

  3. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

  4. Spring Boot 2.0 的配置详解(图文教程)

    本文来自作者 泥瓦匠 @ bysocket.com 在 GitChat 上分享 「Spring Boot 2.0 的配置详解(图文教程)」 编辑 | 哈比 Spring Boot 配置,包括自动配置和 ...

  5. expect学习笔记及实例详解【转】

    1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示: 1.1 首行加上/usr/bin/expect 1.2 spawn: 后面加上需要执行的shell命令,比如说 ...

  6. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  7. java图片填充父容器_java相关:spring的父子容器及配置详解

    java相关:spring的父子容器及配置详解 发布于 2020-5-26| 复制链接 本篇文章主要介绍了spring的父子容器及配置详解,详细的介绍了spring父子容器的概念.使用场景和用法,有兴 ...

  8. 【STM32学习】时钟配置详解

    [STM32学习]时钟配置详解 看懂时钟图 结合代码 外部高速时钟修改 看懂时钟图 在刚开始学习32的时候,并不会在意这些,或者即使看了也看的不是很明白.随着学习的深入,我们发现看门狗.定时器.ADC ...

  9. oracle scn 重置,学习笔记:Oracle SCN详解 SCN与Oracle数据库恢复的关系

    天萃荷净 分享一篇关于Oracle SCN的详解,介绍SCN与Oracle数据库恢复的关系和SCN在数据库中的作用 一.为什么需要System checkpoint SCN号与Datafile Che ...

  10. webpack手摸手学习系列之配置详解的 entry、output、module、resolve、devServer 和 optimization

    一.webpack 配置详解之 entry 创建空文件夹,通过 npm init 命令初始化 package.json 文件,通过 npm install webpack webpack-cli -g ...

最新文章

  1. 人脸识别是怎么识别的?为什么需要大数据?(原理篇)
  2. 德信创业系2014版
  3. iOS开发那些事--自定义单元格实现
  4. 树莓派通过VNC连接时分辨率太低
  5. 思科asa5515端口映射_Cisco ASA端口映射
  6. my-medium.cnf_您的手机如何打开medium.com-我将让门卫和图书管理员解释。
  7. squid服务配置(正向、反向代理)
  8. ubuntu15.10 gvim php,IDE---Gvim之ubuntu下配置php的ide开发工具
  9. sharepoint中使用xslt构建Spotlight(焦点图效果)
  10. xp桌面计算机在哪个文件夹,XP电脑的桌面背景在哪个文件夹?
  11. 基于RS485通讯总线的ModbusRtu协议C#上位机开发源码
  12. Axure RP9新手教程
  13. eNSP华为路由器与交换机连接
  14. Ubuntu深度学习环境配置(2):Ubuntu18.04安装N卡驱动+anaconda3
  15. [零基础学Python]字典,你还记得吗?
  16. 干货!网络推断与数据驱动的影响力最大化问题
  17. 对于SLAM定位中各类坐标系的理解(坐标系,里程计坐标系,基座坐标系与雷达坐标系)
  18. Skia图片解码模块流程分析
  19. A股股票程序化自动交易量化软件
  20. 非法关机 mysql_一次非法关机导致mysql数据表损坏的实例解决 -电脑资料

热门文章

  1. 每天一道LeetCode-----找到第k个排列
  2. python写的一个贴吧爬虫_Python-简单百度贴吧爬虫
  3. 记录vmware的bug failed to install hcmon deriver
  4. python测试用例管理模块_Python的单元测试模块如何检测测试用例?
  5. java实现数字(摘要)签名,生成签名文件,防止文件被人篡改内容,分析和实现
  6. SRAM与SDRAM的区别
  7. 报错:“-bash: git: 未找到命令”
  8. ubuntu切换python,以及切换python后相关包的管理
  9. MySQL中变量的定义和变量的赋值使用(转)
  10. shell编程-实现线性筛