app开发者平台在数字化时代的重要性与发展趋势解析
738
2023-01-22
浅谈Spring Bean的基本配置
一、Spring中set方法的注入
User实体
@Data
//lombok提供的有参构造
@AllArgsConstructor
lombok提供的无参构造
@NoArgsConstructor
public class User {
private int id;
private String name;
private int age;
private String sex;
private String birthday;
}
beanFactory.xml
1.1 set的两种注入方法
我们在xml文件中注入的时候我们可以写成这样:
也可以写成这样:
这没什么区别的,不过我们一般使用前者,毕竟看起来代码少,也方便
代码测试:
@Test
public void test3(){
//创建工厂
BeanFactory beanFactory = new ClassPathXmlApplicationContext("beanFactory.xml");
//从工厂中拿配置好的UserServlet实例
User user = beanFactory.getBean(User.class);
System.out.println(user);
}
1.2 type属性
有事我们在注入的时候有时候会看到type:
这相当于一个类型声明,声明value是什么类型的数据,然后调用类型转换器将我们写入的字符串转换为我们我们所定义的类型。但其实这是一个多余的,当我们注入的时候,会通过User对象进行反射从而知道是什么类型。
1.3 Date()类型的注入
但有一些特殊的类型是Spring所没有的,需要我们自己去定http://义,就比如Date类型,如果我们这样写就会报错
private Date birthday;
Spring是没有这个的转换器,将字符串转换为Date类型,所以其实我们可以直接用String来写,或者new Date(),但是后者约束性太大,不能得到我们想要的日期,还是前者方便。
二、Spring_scop
当我们在测试案例中创建两个User实例时,进行检查发现,这两个实例其实是一个
BeanFactory beanFactory = new ClassPathXmlApplicationContext("beanFactory.xml");
//http://从工厂中拿配置好的UserServlet实例
User user = beanFactory.getBean(User.class);
User user1 = beanFactory.getBean(User.class);
System.out.println(user == user1);
如果我们要创建多例模式,就要使用到属性scope
scope属性有两个值:
1.singleton(默认情况下,即单例模式)
2.prototype(多例模式)
我们在进行测试答案为false
三、自动注入(autowire)
我们在userServlet中注入userDao
但其实我们没必要这样写,Bean中you自动注入的属性autowire,他有两个值:
1.byName,根据名字注入,即id=“userDao”
2.byType,根据类型注入,类型注入比较有局限性,同种类型只能注入一个,多了会报不是唯一错误
四、构造注入
构造注入和set注入的不同点就是,加入元素的顺序必须和你所创建的实体(User)类相同,若不同,则会报错,由于反射过来的类型和转换器转换的类型不同,这时候我们需要加入另一个属性index
那什么时候使用构造注入呢?当我们自己定义一个构造函数的时候使用构造注入
public class User {
private int id;
private String name;
private int age;
private String sex;
private String birthday;
//自定义构造函数
public User(int id , String name){
this.id = id;
this.name = name;
}
}
这个时候就不能使用set注入,他会报错,即使你写出全参构造函数也不行
五、Array注入(数组注入)
private String[] photos;
六、List注入
private List
<value>b
<value>c
七、Set注入
private Set
八、Map注入
private Map
//第一种写法
//第二种写法
九、Property注入
private Properties prop;
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~