文章目录
3.自动装配:
和ref标签功能一样;但不容易看出具体配了什么具体内容;不常用
作用:不去选择bean,让容器自动给定bean
方法:byType ,byName,constructor(构造器)
byType:安装类型进行自动装配; 注意:相同类型的bean只能有一个
byName:安装名进行自动装配;并且id名要于要装配的属性名一致
pojo
public class SysRole {
private Integer roleid;
private String rolename;
private String roledesc;
private Integer rolestate;
}
public class SysUser {
private Integer userid;
private Integer roleid;
private String username;
private String userpwd;
private String usertruename;
private String usersex;
private String useridentity;
private String userphone;
private String useraddr;
private Integer userstate;
private Integer pcid;
private SysRole role;
private List<SysRole> roles;
}
xml
<bean id="role" class="mybatisdemo.pojo.SysRole"> <constructor-arg value="5" name="roleid"/> <constructor-arg value="自动装配" name="rolename"/> <constructor-arg value="爱号" name="roledesc"/> <constructor-arg value="0" name="rolestate"/></bean><bean id="user" class="mybatisdemo.pojo.SysUser" autowire="byName"></bean>
没啥用系列
4.bean之间的继承关系
1.基础继承
2.字bean中覆盖父bean中的配置
3.abstract属性
注意:只是配置的复用
稍微能用到
5.前置依赖depends-on标签
有ref标签就必须先创建关联的bean;这是一种强依赖关系
弱依赖关系:
作用:主要作用有先后顺序的bean,但是这些bean之间没有依赖关系
public class DataSource {
private static String url="127.0.0.1";
public static String getUrl() {
return url;
}
public static void setUrl(String url) {
DataSource.url = url;
}
}
public class ConfigDataSource {
public ConfigDataSource(){
DataSource.setUrl("172.168.0.67");
}
}
public class GetConnection {
public GetConnection(){
System.out.println(DataSource.getUrl());
}
}
<?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">
<bean id="conn" class="mybatisdemo.test.GetConnection" depends-on="config" />
<bean id="config" class="mybatisdemo.test.ConfigDataSource" />
</beans>
测试
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-3.xml");
GetConnection conn = (GetConnection)context.getBean("conn");
System.out.println(conn);
}
重要
6.bean的作用域–属性scope
singleton:默认的作用域,在Spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式操作
注意:在IOC容器中以单列的形式存在;bean的实例在容器创建的时候就会创建;这样的单列线程是不安全的
prototype:每次调用getBean()是都会返回一个新的实例
注意:每次请求都会返回必填的对象;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">
<bean id="conn" class="mybatisdemo.test.GetConnection" scope="singleton"/>
<bean id="config" class="mybatisdemo.test.ConfigDataSource" />
</beans>
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-3.xml");
GetConnection conn = (GetConnection)context.getBean("conn");
GetConnection conn1 = (GetConnection)context.getBean("conn");
System.out.println(conn==conn1);
重要–看懂就行
7.使用外部配置文件 --context
-
db.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/itblog?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8&useUnicode=true
jdbc.username=root
jdbc.password=123456
DataSource
package mybatisdemo.common.utils;
/**
* @Author: 謦潇
* @DateTime: 2022/10/19 16:35
* @ClassName: DataResources
* @Blog: https://blog.csdn.net/m0_49191104
*/
public class DataSource {
private String driver;
private String url;
private String username;
private String password;
public DataSource() {
}
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "DataSource{" +
"driver='" + driver + '\'' +
", url='" + url + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
spring-4.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 注意:添加
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"
-->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataresource" class="mybatisdemo.common.utils.DataSource">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
</beans>
测试
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-4.xml");
DataSource datasource =(DataSource) context.getBean("dataresource");
System.out.println(datasource);
}
8.生命周期
Spring lOc容器可以管理Bean 的生命周期, Spring 允许在 Bean生命周期的特定点执行定制的任务.
Spring loC容器对Bean 的生命周期进行管理的过程:
1.通过构造器或工厂方法创建Bean实例。
2.为 Bean 的属性设置值和对其他 Bean的引用。
3.调用Bean的初始化方法;
4. Bean可以使用了。
5.当容器关闭时,调用Bean 的销毁方法
在 Bean 的声明里段置init-method和 destroy-method属性,为 Bean指定初始化和销毁方法.
bean的生命周期方法:面试
1.init-method: 初始化方法
2.destroy-method:销毁方法
bean的整个生命周期:面试
1.调用构造方法创建实例
2.设置属性
3.调用init-method -----bean语句准备好了,可以使用
4.容器关闭的时候调用:destroy-method
注:具体执行的init方法,destroy由自己定义
后置处理器
在初始化前后运行 (调用init-method)
PostProcessBeforeInitialization
PostProcessAfterInitialization
实则没啥用:管理的范围太广
基本只用:bean注入