Python 官方文档:入门教程 => 点击学习
目录Bean的作用域默认配置scope = “singleton”scope = “prototype”Bean的自动装配通过name自动装配通过type自动装配Bean的作用域 s
spring中bean的作用域共有singleton、prototype、request、session、application、websocket六种
其中后四种都是用在WEB应用程序中的,主要介绍前两种singleton(单例)和prototype(原型)
Bean的作用域范围为singleton时,所有实例共享一个对象。
Spring的默认配置为scope = “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"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--Spring默认配置为scope = "singleton"-->
<bean id = "user" class="indi.stitch.pojo.User" />
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--Spring默认配置为scope = "singleton"-->
<bean id = "user" class="indi.stitch.pojo.User" scope = "singleton" />
</beans>
测试类及输出结果:
import indi.stitch.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void test2() {
ApplicationContext context = new ClassPathXmlApplicationContext("namespace.xml");
User user = context.getBean("user", User.class);
User user2 = context.getBean("user", User.class);
System.out.println(user == user2);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--Spring默认配置为scope = "singleton"-->
<bean id = "user" class="indi.stitch.pojo.User" scope = "prototype" />
</beans>
测试类及输出结果:
import indi.stitch.pojo.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void test2() {
ApplicationContext context = new ClassPathXmlApplicationContext("namespace.xml");
User user = context.getBean("user", User.class);
User user2 = context.getBean("user", User.class);
System.out.println(user == user2);
}
}
Spring中Bean的自动装配基于autowired标签实现
首先创建实体类People、Cat、Dog,People和Cat、Dog是组合关系,People中定义了依赖于Cat、Dog的属性
People实体类
package indi.stitch.pojo;
public class People {
private Cat cat;
private Dog dog;
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "People{" +
"cat=" + cat +
", dog=" + dog +
'}';
}
}
Cat实体类
package indi.stitch.pojo;
public class Cat {
public void shout() {
System.out.println("miao~");
}
}
Dog实体类
package indi.stitch.pojo;
public class Dog {
public void shout() {
System.out.println("wang~");
}
}
<?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 = "cat" class="indi.stitch.pojo.Cat" />
<bean id = "dog" class="indi.stitch.pojo.Dog" />
<!--在Spring上下文中通过检索name完成自动装配,检索依据为bean中属性的set方法除set部分外的后缀-->
<bean id = "people" class="indi.stitch.pojo.People" autowire="byName"/>
</beans>
测试类及输出结果:
import indi.stitch.pojo.People;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
People people = context.getBean("people", People.class);
people.getCat().shout();
people.getDog().shout();
}
}
输出结果
<?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 = "cat" class="indi.stitch.pojo.Cat" />
<bean id = "dog" class="indi.stitch.pojo.Dog" />
<!--在Spring上下文中通过对属性对应类型进行检索完成自动装配,Spring配置中不能存在被依赖的相同类型的多个bean,被依赖的bean在Spring中配置时可以省略id属性-->
<bean id = "people" class="indi.stitch.pojo.People" autowire="byType"/>
</beans>
测试类和结果和上面相同
import indi.stitch.pojo.People;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
People people = context.getBean("people", People.class);
people.getCat().shout();
people.getDog().shout();
}
}
输出结果
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: Spring中Bean的作用域和自动装配方式
本文链接: https://lsjlt.com/news/136959.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0