SpringFramework实战指南件管 4章 要点
2023-11-29 本文已影响0人
大也
-- ---------------------- 4.1/4.2 基于XML配置方式组理 概念
-- ---------------------- 4.2 基于XML配置方式 / 整合三层架构组件 练习
-- ---------------------- 4.3 基于 注解 方式管理 Bean
-- ---------------------- 4.4基于注解+配置类方式整合三层架构组件
-- ---------------------- 4.5/6三种配置方式总结/搭建测试环境
-- ---------------------- 4.1/4.2 基于XML配置方式组理 概念
- 无参数构造函数实例化的组件,进行ioc配置
2.静态工厂类如何声明工厂方法进行ioc的配置
3.非静态工厂如何声明ioc配置
4.单个/多个 构造参数注入 有形参方式 推荐
5.触发 set方法注入
6.如何创建ioc容器并且读取配置文件 获取ioc容器的组件
7.根据bean id 同时指定bean的类型 class 相关性质
8.测试ioc配置内置方法的触发
9.FactoryBean 标准化工厂类组件 实现
10.4.2 基于XML方式整合三层架构组件 包括 jdbc 和DruidDataSource 使用
11.4.3 基于 注解 方式管理 Bean
<bean id="HappyComponent1" class="com.atguigu.ioc_01.HappyComponent" />
<bean id="HappyComponent2" class="com.atguigu.ioc_01.HappyComponent" />
<!--2.静态工厂类如何声明工厂方法进行ioc的配置
<bean - 一个组件信息 - 一个组件对象>
id 组件标识 唯一 方便后期读取
class 组件的工厂类的权限定符
factory-method 必须是静态方法
-->
<bean id="ClientService" class="com.atguigu.ioc_01.ClientService" factory-method="createInstance" />
<!--3.非静态工厂如何声明ioc配置
3.1 配置工厂类的组件信息
3.2通过指定非静态工厂对象 和方法名来生成ioc信息
-->
<bean id="DefaultServiceLocator" class="com.atguigu.ioc_01.DefaultServiceLocator"/>
<bean id="DefaultServiceLocator_createClientServiceInstance" factory-bean="DefaultServiceLocator" factory-method="createClientServiceInstance"/>
</beans>
```objec-c
<?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">
<!--4
引用和被引用大的文件必须都存放在ioc容器中
1.单个/多个 构造参数注入
2.2)有形参方式 推荐
constructor-arg 构造参数传值的di配置
value = 直接属性值 比如 string name = "二狗子"
ref = 引用其他的bean beanid值
-->
<bean id="UserDao" class="com.atguigu.ioc_02.UserDao"/>
<bean id="UserService1" class="com.atguigu.ioc_02.UserService" >
<constructor-arg name="name" value="二狗子"/>
<constructor-arg name="age" value="18"/>
<constructor-arg ref="UserDao"/>
</bean>
<!--5 触发 set方法注入
找的是set方法 格式 setMovieName 移除set M变小写 movieName
所以等于是设置 set 属性
-->
<bean id="MovieFinder" class="com.atguigu.ioc_02.MovieFinder"/>
<bean id="SimpleMovieLister" class="com.atguigu.ioc_02.SimpleMovieLister" >
<property name="movieName" value="消失的他"/>
<property name="movieFinder" ref="MovieFinder"/>
</bean>
</beans>
<!--6 讲解如何创建ioc容器并且读取配置文件
创建容器 选择合适的容器实现即可
接口BeanFactory
ApplicationContext:
ClassPathXmlApplicationContext 读取类路径下xml的配置方式
FileSystemApplicationContext 读取指定文件路径下Xml的配置方式
AnnotationConfigApplication 读取配置方式的Ioc容器
WebApplicationContext web项目专属的配置的ioc容器
如何在ioc容器中获取bean
-->
//1.直接多太形式创建 Ioc容器类指定配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-03.xml");
//2. 先创建Ioc容器 在设置配置地址 再刷新
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext();
classPathXmlApplicationContext.setConfigLocations("spring_03.xml");
classPathXmlApplicationContext.refresh();
<!--7 讲解如何创建ioc容器并且读取配置文件
* 1 .创建ioc容器对象
* 2.获取ioc容器的组件
* 1)直接根据bean id 获取 返回值类型是obj 需要强转 不推荐
* 2)根据bean id 同时指定bean的类型 class
* 3) 根据类型获取
* 但是如果有配置了2个 相应bean类 包括对应实现类/接口类
* 就会出现 NOUnique 不是唯一的报错
* instanceof ioc容器的类型 == ture
-->
Object happyComponent = classPathXmlApplicationContext.getBean("happyComponent");
HappyComponent component = (HappyComponent) happyComponent;
HappyComponent component1 = classPathXmlApplicationContext.getBean("happyComponent", HappyComponent.class);
HappyComponent component2 = classPathXmlApplicationContext.getBean(HappyComponent.class);
component.doWork();
classPathXmlApplicationContext.close();
<!--8 测试ioc配置内置方法的触发
* 1)创建ioc容器 就会进行组件那对象的实例化 ->init
* 2) 调用对应的close方法
-->
<!-- <bean id="javaBean" class="jav"/>-->
<bean id="javaBean" class="com.atguigu.Ioc_04.JavaBean" init-method="init" destroy-method="destory"/>
<bean id="javaBean2" class="com.atguigu.Ioc_04.JavaBean2" scope="singleton"/>
<bean id="javaBean22" class="com.atguigu.Ioc_04.JavaBean2" scope="prototype"/>
<!--9 实现factoryBean接口
* 步骤:
* 1.实现factoryBean接口 在接口内 getObject 使用你自己的方法实例化对象就可以了
* 2.配置相应的配置文件
<bean id="javaBean" class="com.atguigu.Ioc_05.JavaBeanFactoryBean">
<!--此位置属性是给JavaBeanFactoryBean 配置的
不是给javaBean 配置的 所以 需要 JavaBeanFactoryBean 定义变量承接 再注入
javaBean
-->
<property name="value" value="xugougou"/>
</bean>
* id getobject 返回的对象的标识
* 工厂也会加入到ioc容器 工厂方法的bean的标识为&id
* Object bean1 = classPathXmlApplicationContext.getBean("&javaBean");
* class FactoryBean 标准化工厂类组件
*
* FactoryBean 标准化工厂类组件 组件
* BeanFactory ioc容器最大的接口 ioc容器
-->
public class JavaBeanFactoryBean implements FactoryBean<JavaBean> {
private String value;
public void setValue(String value) {
this.value = value;
}
@Override
public JavaBean getObject() throws Exception {
JavaBean javaBean = new JavaBean();
javaBean.setName(value);
return javaBean;
}
@Override
public Class<?> getObjectType() {
return JavaBean.class;
}
}