博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring自学日志03(作用域,自动装配)
阅读量:3950 次
发布时间:2019-05-24

本文共 4126 字,大约阅读时间需要 13 分钟。

bean的作用域

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*/

bean的自动装配

自动装配是Spring满足Bean依赖的一种方式!

Spring会在上下文中自动寻找,并自动给bean装配属性!
有三种自动装配方式
1.在XML中显示的配置
2.java中显示配置
3.隐式的自动装配bean

环境搭建

people类

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/

你可能感兴趣的文章
Android开发:如何实现TCP和UDP传输
查看>>
Android电源管理相关应用技巧分享
查看>>
Android录音失真具体解决方案
查看>>
Android根文件系统相关应用介绍
查看>>
Android文件系统深入剖析
查看>>
Android判断网络状态方法详解
查看>>
在Android上实现Junit单元测试的四部曲
查看>>
有效控制Android应用程序的耗电量
查看>>
Android术语列表概览
查看>>
全方位解读Android多媒体框架源码
查看>>
Android音乐编程的管理音频硬件
查看>>
Android UI控件组合应用之一:建立数据模型
查看>>
避免Andriod平台图片失真的图片形式
查看>>
Android之Gridview图片列表
查看>>
objdump的使用方法
查看>>
编译错误处理noproguard.classes-with-local.dex已杀死
查看>>
LTE - CSFB技术
查看>>
GSM链路层信令协议
查看>>
技术道德
查看>>
“需求为王”才是根本
查看>>