初识 Spring(04)---(bean属性)

简介: bean属性1. id、name都可以表示bean的名字 id:以前属性中不能有特殊字符,现在放特殊字符也没关系 name:属性可以有特殊字符文件目录:代码:配置文件:applicationContext.

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...

目录
相关文章
|
3月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
1天前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
29天前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
59 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
2月前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
169 24
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
20天前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
2月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
193 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
2月前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
spring复习02,xml配置管理bean
|
29天前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
62 1
|
1月前
|
Java Spring
获取spring工厂中bean对象的两种方式
获取spring工厂中bean对象的两种方式
27 1
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细介绍了Spring框架中的核心概念——Spring Bean的生命周期,包括实例化、属性赋值、接口回调、初始化、使用及销毁等10个阶段,并深入剖析了相关源码,如`BeanFactory`、`DefaultListableBeanFactory`和`BeanPostProcessor`等关键类与接口。通过理解这些核心组件,读者可以更好地掌握Spring Bean的管理和控制机制。
75 1