目录
1.什么是 Bean 管理:
(1)通过 Spring 创建对象
(2)通过 Spring 注入属性
2.IOC 操作 Bean 管理有两种方式:
(1)基于 xml 配置文件方式实现
(1.1)基于 xml 方式创建对象
(1.2)基于 xml 方式注入属性
(2)基于注解方式实现
1.什么是 Bean 管理:
Bean 管理指的是两个操作:
(1)通过 Spring 创建对象
(2)通过 Spring 注入属性
2.IOC 操作 Bean 管理有两种方式:
(1)基于 xml 配置文件方式实现
(1.1)基于 xml 方式创建对象
- 在项目中找到 xxx.xml 文件,通过使用<bean></bean> 标签,在标签内添加对应属性,就可以实现对象的创建
<?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"><!--配置User对象创建-->
<bean id="user" class="com.lbj.spring5.User"></bean></beans>
- 【Bean标签基本属性的认识】
- * id 属性:唯一标识
在java 代码里,.getBean方法就是通过这个唯一的标识找到<bean>标签的id属性
- *class 属性:类的全路径
例如一个项目结构如下:
那么 User 这个类的全路径为:
com.lbj.spring5.User
*name 属性(少用,曾用于Struts1框架):与 id 属性的区别在于 name 属性内可以添加特殊符号
- 创建对象的时候,默认是执行无参数构造方法
一个类里面是有默认的一个公共无参构造方法,同样,Spring框架也是默认执行无参构造方法
例子:
在User类中添加如下代码:
package com.lbj.spring5;/*** Created by 14811 on 2020/11/25.*/
public class User {private String userName;// alt+insert 创建一个有参构造方法//此时如果不声明无参构造方法,意味着无参构造方法不存在public User(String userName) {this.userName = userName;}//创建一个普通方法等待调用public void add(){System.out.println("实现了spring");}
}
运行 TestSpring5 中的testAdd()测试方法,发现报错,原因:没有无参构造方法却调用了有参构造方法
(1.2)基于 xml 方式注入属性
DI(dependency injection):依赖注入
DI是IOC 中的一种具体实现
- 第一种注入方式:使用set方法进行注入
重新创建一个类专门演示我们在没学习Spring之前是怎样实现这个过程:
在com.lbj.spring5下创建一个 Book 类
Book类的代码如下:
package com.lbj.spring5;public class Book {//在类中创建属性:往book类中写入一个属性private String bname;//创建属性对应的set方法:set方法注入属性public void setBname(String bname) {this.bname = bname;}public static void main(String[] args) {Book book=new Book();book.setBname("红楼梦");}
}
- 接下来我们体验一下学习Spring 框架后
我们是怎样在Spring 配置文件【1】配置对象创建,【2】配置属性注入:
结构图:
第一步:在bean1.xml 文件中:
<?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"><!--配置Book对象创建--><bean id="book" class="com.lbj.spring5.Book"><!--使用property完成属性注入name:类里面的属性名称value:向属性注入的值--><property name="bname" value="红楼梦"></property></bean>
</beans>
第二步:在Book类中:
package com.lbj.spring5;public class Book {//在类中创建属性:往book类中写入一个属性private String bname;//创建属性对应的set方法:set方法注入属性public void setBname(String bname) {this.bname = bname;}public void testBook(){System.out.println(bname);}}
在测试类 TestSpring5中:
package com.lbj.spring5.testdemo;import com.lbj.spring5.Book;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestSpring5 {@Testpublic void testBook1(){//1.加载spring配置文件ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");//2.获取配置创建的对象,通过context得到对象Book book=context.getBean("book", Book.class);//3.做输出System.out.println(book);//4.通过book调用testBook()方法book.testBook();}
}
结果:
- 第二种注入方式:有参构造方法注入:
代码如下:
package com.lbj.spring5;
public class Book {//往book类中写入一个属性private String bname;//有参数的构造方法注入属性public Book(String bname) {this.bname = bname;}public static void main(String[] args) {Book book=new Book("红楼梦");}
}
(2)基于注解方式实现
详情在博客下一章