本文共 4126 字,大约阅读时间需要 13 分钟。
Singleton(单例模式,是默认spring的)
import com.injection.Student;import com.injection.User;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest { public static void main(String[] arsg){ ApplicationContext context2 = new ClassPathXmlApplicationContext("Userbean.xml"); User user = context2.getBean("user2",User.class); System.out.println(user.toString()); ApplicationContext context3 = new ClassPathXmlApplicationContext("Userbean.xml"); User user2 = context2.getBean("user2",User.class); System.out.println(user2.toString()); System.out.println(user2==user);//都取user2,但是取两次就创建两个不同的对象 }}/*结果User{name='雷志明', Age=78}User{name='雷志明', Age=78}true*/
prototype(原型模式,是默认spring的)
从容器中取相同值是会创建两个不同的对象 每次get都会创建一个新的的对象测试
import com.injection.Student;import com.injection.User;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyTest { public static void main(String[] arsg){ ApplicationContext context2 = new ClassPathXmlApplicationContext("Userbean.xml"); User user = context2.getBean("user2",User.class); System.out.println(user.toString()); ApplicationContext context3 = new ClassPathXmlApplicationContext("Userbean.xml"); User user2 = context2.getBean("user2",User.class); System.out.println(user2.toString()); System.out.println(user2==user);//都取user2,但是取两次就创建两个不同的对象。 }}/*结果User{name='雷志明', Age=78}User{name='雷志明', Age=78}false*/
自动装配是Spring满足Bean依赖的一种方式!
Spring会在上下文中自动寻找,并自动给bean装配属性! 有三种自动装配方式 1.在XML中显示的配置 2.java中显示配置 3.隐式的自动装配beanpeople类
package com.injection;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; } public String getName() { return name; } @Override public String toString() { return "people{" + "cat=" + cat.rshout() + ", dog=" + dog.rshout() + ", name='" + name + '\'' + '}'; } public void setName(String name) { this.name = name; } private String name;}
Dog类
package com.injection;public class Dog { public String rshout(){ return "汪汪汪"; } public void shout(){ System.out.println("汪汪汪"); }}
Cat类
package com.injection;public class Cat { public String rshout(){ return "喵喵喵"; } public void shout(){ System.out.println("喵喵喵"); }}
用byName自动装配(set方法注入)
能在容器中的上下文中查找,和自己set方法值对应的bean注入!用byType自动装配(类型全局唯一,可以省略ID)
能在容器中的上下文中查找,和自己对象属性类型相同的bean注入!用注解自动装配(不需要set有方法,也可以操作。只要你装配的属性在IOC容器中,且名字一致[参考byName])
先导入context约束xmlns:context="http://www.springframework.org/schema/context"
@Autowired直接在类属性上操作
@AutoWired注解默认应该是Bytype类型查找,找不到再Byname找两个都失败才会报错package com.injection;import org.springframework.beans.factory.annotation.Autowired;public class people { //required为false说明这个对象可以为Null,反之不行。 @Autowired(required=false)//用注解自动装配bean, private Cat cat; @Autowired//用注解自动装配bean @Qualifier(value = "dog")//在类型一致的情况下指定id="dog"的bean,和@Autowired搭配使用 private Dog dog;
在使用上@Resource和@Autowired一样,但@Resource性能更强
@Resource先默认byName失败后在byType两个都失败才会报错package com.injection;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import javax.annotation.Resource;public class people { @Resource(name = "cat")//指定id="cat"的bean private Cat cat; @Resource//用注解自动装配bean private Dog dog; private String name;
@Scope()//该类的作用域
@Scope("singleton")//该类的作用域public class User { private String name;}
补充
@Nullable:字段标记了这个注解,说明这个字段可以为null。//cat可以为空,用来避免报错public void setCat(@NullableCat cat) { this.cat = cat;}
转载地址:http://blrwi.baihongyu.com/