IOC
操作Bean管理xml
方式
第一种注入方式:基于xml
方式创建对象Setter方法
知识储备:
1.在Spring配置文件中,使用`Bean`标签,标签里面添加对应属性,可以实现对象创建,在底层使用`xml`读取解析,和反射,工厂模式
2.在`Bean`中创建对象使用标签
id属性:唯一标识
class属性:类全路径
3.`Bean`子标签:
property属性:类中对应属性
value属性;给属性的赋值
4.`IOC`创建对象时,默认使用无参构造方法完成对象创建,此时就需要提供`Setter`方法
注意是:如果没有无参构造方法,并且也不在`Bean`配置文件中指定使用有参构造器,则会报以下错误:
`NoSuchMethodException`
Setter
方法注入
1.创建类
1.定义类
2.定义属性
3.提供对应的setter
方法
2.创建Spring
配置文件【就是 bean.xml
文件】
1.使用bean
标签创建对象
2.在bean
标签中注入属性
`
定义类
package com.haikang.spring.di.pojo;
/**
* @Author 海康
* @Version 1.0
*/
public class User {
private Integer id;
private String name;
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
public void setName(String name) {
this.name = name;
}
}
创建Bean文件
<!--使用Set方式完成对象注入和普通赋值-->
<bean id="user" class="com.haikang.spring.di.pojo.User">
<!--
使用property属性完成属性注入
name: 类里面属性名称
value: 向属性注入的值
-->
<property name="name" value="海康"/>
<property name="id" value="101"/>
</bean>
test
类
@Test
public void testSetterDi(){
ApplicationContext context =
new ClassPathXmlApplicationContext("Bean1.xml");
User user = context.getBean("user", User.class);
System.out.println(user);
// 返回值是:User{id=101, name='海康'}
}
第二种注入方式:使用有参构造器
方法注入
1.创建类【有三小步】
- 定义类
- 定义属性
- 提供对应的
有参构造器
方法
2.创建Spring
配置文件
- 使用
bean
标签创建对象 - 在
bean
标签中注入属性
定义类
package com.haikang.spring.di.pojo;
/**
* @Author 海康
* @Version 1.0
*/
public class User {
private Integer id;
private String name;
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
public void setName(String name) {
this.name = name;
}
}
创建xml
文件
<!--使用有参构造器方式完成对象注入和普通赋值-->
<bean id="user" class="com.haikang.spring.di.pojo.User">
<constructor-arg name="name" value="海康"/>
<constructor-arg name="id" value="102"/>
</bean>
test
类
@Test
public void testSetterDi(){
ApplicationContext context =
new ClassPathXmlApplicationContext("Bean1.xml");
User user = context.getBean("user", User.class);
System.out.println(user);
// 返回值是:User{id=101, name='海康'}
}
P
名称空间注入【了解】
使用P
名称空间注入,可以简化基于xml
配置setter
方式注入【注意是:是对setter
方式进行简化,不能对有参构造器方式简化】
使用步骤
第一步:添加p
名称空间在配置文件中
xmlns:p="http://www.springframework.org/schema/p"
上面的那行代码可以复制这行进行修改,将最的beans修改为p,并添加一个前缀`p`
xmlns="http://www.springframework.org/schema/beans"
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
</beans>
第二步:进行属性注入,在Bean
标签里面进行操作
<!--使用P命名空间-->
<bean id="user" class="com.haikang.spring.di.pojo.User" p:id="103" p:name="复兴" />
案例:
定义类
package com.haikang.spring.di.pojo;
/**
* @Author 海康
* @Version 1.0
*/
public class User {
private Integer id;
private String name;
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
public void setName(String name) {
this.name = name;
}
}
xml
xmlns:p="http://www.springframework.org/schema/p"
<!--P名称空间,前提是引入 P 命名空间,也就是上面的那行代码-->
<bean id="book" class="com.haikang.pojo.Book" p:bname="复兴路" p:bauthor="海康"/>
test
类
@Test
public void testBook(){
ApplicationContext context = new
ClassPathXmlApplicationContext("appliactionContest.xml");
Book book = context.getBean("book", Book.class);
System.out.println(book);
book.show();
}