初识 Spring(04)---(bean属性)
bean属性
1. id、name都可以表示bean的名字
id:以前属性中不能有特殊字符,现在放特殊字符也没关系
name:属性可以有特殊字符
文件目录:
代码:配置文件:applicationContext.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="car" class="com.neudeu.po.Car"></bean> </beans>
Test.java
package com.neuedu.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Object bean = ac.getBean("car"); Object bean2 = ac.getBean("car"); System.out.println(bean == bean2); } }
Car.java
package com.neudeu.po; public class Car { private String brand; private double price; public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Car [brand=" + brand + ", price=" + price + "]"; } }
输出:
<bean id="car" class="com.neudeu.po.Car"></bean> 只配置一个 car,
Object bean = ac.getBean("car");Object bean2 = ac.getBean("car"); 无论获取几次但都是同一个对象
System.out.println(bean == bean2);故输出为 ture
2.scope属性:bean的生存范围
1.singleton 单例(默认)
2. proptotype (原型)每次创建新的对象
代码:配置文件:applicationContext.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="car" class="com.neudeu.po.Car" scope="prototype"></bean> </beans>
Test.java
package com.neuedu.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Object bean = ac.getBean("car"); Object bean2 = ac.getBean("car"); System.out.println(bean == bean2); } }
car.java
package com.neudeu.po; public class Car { private String brand; private double price; public Car() { System.out.println("Car构造方法"); } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Car [brand=" + brand + ", price=" + price + "]"; } }
输出:
修改为 singleton
<?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="car" class="com.neudeu.po.Car" scope="singleton"></bean> </beans>
输出:
3.autowire 自动装配(可读性太差)
1.byName 按名字装配
2.byType 按类型装配
文件目录:
代码:配置文件:applicationContext.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="car" class="com.neudeu.po.Car" scope="singleton"></bean> --> <bean id="idCard" class="com.neudeu.po.idCard"> <property name="cardNo" value="640000200000000011"></property> </bean> <bean id ="person" class="com.neudeu.po.Person" autowire="byType" > </bean> </beans>
Test.java
package com.neuedu.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); } }
idCard.java
package com.neudeu.po; public class idCard { public idCard() { System.out.println("IdCard..."); } private String CardNo; public String getCardNo() { return CardNo; } public void setCardNo(String cardNo) { CardNo = cardNo; } }
Person.java
package com.neudeu.po; import com.neudeu.po.idCard; import java.util.List; public class Person { private idCard idCard; private String name; private int age; private List<Car> cars; public List<Car> getCars() { return cars; } public void setCars(List<Car> cars) { this.cars = cars; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public idCard getIdCard() { return idCard; } public Person(){ System.out.println("Person..."); } public void setIdCard(idCard idCard) { System.out.println("setIdCard..."); this.idCard = idCard; } }
输出:
<bean id ="person" class="com.neudeu.po.Person" autowire="byType" >
autowire="byType" :自动注入(按类型),自动的从 Spring 中找有没有 Person 里需要的 idCard 类型的对象,有点化就自动的将其注入到 Person 的属性里面去
代码:配置文件:applicationContext.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="car" class="com.neudeu.po.Car" scope="singleton"></bean> --> <bean id="idCard" class="com.neudeu.po.idCard"> <property name="cardNo" value="640000200000000011"></property> </bean> <bean id="idCard2" class="com.neudeu.po.idCard"> <property name="cardNo" value="640000200000000012"></property> </bean> <bean id ="person" class="com.neudeu.po.Person" autowire="byName"></bean> </beans>
输出:autowire="byName" :自动注入(按名字装配)
4. lazy-init 延迟加载
false : 立即加载(默认)
true : 用到时加载
代码:配置文件:applicationContext.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="car" class="com.neudeu.po.Car" scope="singleton"></bean> --> <bean id="idCard" class="com.neudeu.po.idCard"> <property name="cardNo" value="640000200000000011"></property> </bean> <bean id="idCard2" class="com.neudeu.po.idCard"> <property name="cardNo" value="640000200000000012"></property> </bean> <bean id ="person" class="com.neudeu.po.Person" autowire="byName" lazy-init="true"></bean> </beans>
输出:与前文相比,Person 都没有执行(延迟加载)
修改代码:Test.java
package com.neuedu.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Object bean = ac.getBean("person"); //加入代码 System.out.println(bean); //加入代码 } }
输出:只有执行 Object bean = ac.getBean("person"); 后才会执行后续代码
5 init-method="init"
在容器对这个bean初始化时执行该方法
代码:配置文件:applicationContext.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="car" class="com.neudeu.po.Car" scope="singleton"></bean> --> <bean id="idCard" class="com.neudeu.po.idCard"> <property name="cardNo" value="640000200000000011"></property> </bean> <bean id="idCard2" class="com.neudeu.po.idCard"> <property name="cardNo" value="640000200000000012"></property> </bean> <bean id ="person" class="com.neudeu.po.Person" autowire="byName" init-method="init"> //修改代码 </bean> </beans>
Person.java
package com.neudeu.po; import com.neudeu.po.idCard; import java.util.List; public class Person { private idCard idCard; private String name; private int age; private List<Car> cars; public List<Car> getCars() { return cars; } public void setCars(List<Car> cars) { this.cars = cars; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public idCard getIdCard() { return idCard; } public Person(){ System.out.println("Person..."); } public void setIdCard(idCard idCard) { System.out.println("setIdCard..."); this.idCard = idCard; } public void init() { System.out.println("init..."); //修改代码 } }
输出:bean初始化时执行 init 方法,输出 init...
6. destroy-method="destroy":
容器关闭时执行该方法
代码:配置文件:applicationContext.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 ="person" class="com.neudeu.po.Person" autowire="byName" init-method="init" destroy-method="destroy"></bean> </beans>
Person.java
package com.neudeu.po; import com.neudeu.po.idCard; import java.util.List; public class Person { private idCard idCard; private String name; private int age; private List<Car> cars; public List<Car> getCars() { return cars; } public void setCars(List<Car> cars) { this.cars = cars; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public idCard getIdCard() { return idCard; } public Person(){ System.out.println("Person..."); } public void setIdCard(idCard idCard) { System.out.println("setIdCard..."); this.idCard = idCard; } public void init() { System.out.println("init..."); } public void destroy(){ System.out.println("destroy..."); //修改代码 } }
输出:并没有输出 destory... 要在关闭容器时才会执行
修改代码:Test.java
package com.neuedu.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //修改代码 Object bean = ac.getBean("person"); System.out.println(bean); ac.close(); } }
输出:执行关闭容器,输出 destory...

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java源码-ArrayDeque
开篇 Deque 接口继承自 Queue接口,但 Deque 支持同时从两端添加或移除元素,因此又被成为双端队列。鉴于此,Deque 接口的实现可以被当作 FIFO队列使用,也可以当作LIFO队列(栈)来使用。官方也是推荐使用 Deque 的实现来替代 Stack。 ArrayDeque 是 Deque 接口的一种具体实现,是依赖于可变数组来实现的。ArrayDeque 没有容量限制,可根据需求自动进行扩容。ArrayDeque不支持值为 null 的元素。 ArrayDeque类图 ArrayDeque类图 ArrayDeque的类变量和构造函数 ArrayDeque的类变量当中数组elements用来保存队列元素,head指针指向第一个存储元素,tail指向最后一个元素的下一个位置。 ArrayDeque的calculateSize的逻辑非常巧妙,用于计算大于numElements的最小的2*n次方的值。 public class ArrayDeque<E> extends AbstractCollection<E> implements Deque...
- 下一篇
Grafana+prometheus+php 自动创建监控图
版权声明:作者:汤青松 https://blog.csdn.net/u013431141/article/details/81488180 背景 在grafana+ prometheus+php 监控系统实践文章当中已经实现了我们的第一个监控图表,现在我们有了一个新需求,需要对多个节点实现不同的监控,以及一个汇总的监控; 按照我们之前手动创建仪表盘的方法,每新增一个节点都需要手动去修改prometheus配置,并且需要去grafana系统当中创建一个仪表盘,在节点很少的时候这种方式也能满足,但当节点数量多起来的时候,就会增加很大一部分工作量,并且存在每次创建的图表规则不一致的风险,因此我们的需求是在新增节点之后让grafana自动创建一个仪表盘。 实现过程 操作步骤 prometheus调用中间件 中间件收集各节点数据 验证中间件数据有效性 调试仪表盘API接口 编写节点变动事件处理 一、prometheus调用中间件 1.修改prometheus配置文件 修改配置文件的目的是把之前直接连接单个节点的地址更改为中间件地址,之前单节点的uri为’==/api/v1/rrd/metrics...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7,CentOS8安装Elasticsearch6.8.6