三种思想

Spring
BeanFactory

spring容器


示例
<bean id="userServiceImpl" class="icu.slovej.mqdemo.service.impl.UserImpl">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userDao" class="icu.slovej.mqdemo.dao.impl.UserDaoImpl"></bean>ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
这样创建下面的类的实例Bean,下面的方法会由spring容器去赋值public class UserImpl implements UserService {
UserDao userDao;
public void setUserDao(UserDaoImpl userDao) {
this.userDao = userDao;
}
}基于xml的Spring应用
Bean的配置

- id:Bean的名字,是作为Key的

- name:低层是设置一个alias的map映射到id上去






- 静态工厂
<bean id="u1" class="icu.slovej.mqdemo.factory1" factory-method="userDa0"></bean>- factory-method:告诉容器,使用这个工厂方法创造bean
- 实例工厂
<bean id="f1" class="icu.slovej.mqdemo.factory1">
<constructor-arg name="a" value="asd"></constructor-arg>
</bean>
<bean id="u1" class="icu.slovej.mqdemo.dao.impl.UserDaoImpl" factory-bean="f1" factory-method="userDao">
</bean>factory-bean:指定了工厂bean
factory-method:指定了工厂的方法
constructor:这就构造这个bean需要的参数,都可以这样声明
- name:参数名
- value:参数值
- 实现FactoryBean延迟化bean
<bean id="f1" class="icu.slovej.mqdemo.factory1"></bean>这个Bean看似是factory对象,但是其实是UserDaoImpl对象
public class factory1 implements FactoryBean<UserDao> {
@Override
public UserDao getObject() throws Exception {
// 当执行getBean时才调用这个方法产生对应的Bean
return new UserDaoImpl();
}
@Override
public Class<?> getObjectType() {
return UserDao.class;
}
@Override
public boolean isSingleton() {
return FactoryBean.super.isSingleton();
}
}
自动装配

命名空间



导入其他xml

起别名

获取Bean的方法

配置非自定义
如第三方jar包




Bean的实例化过程




Sping后处理器

实现该接口:可以修改和注册Bean

子接口:更方便的去注册Bean

基本过程
- 对Bean的定义进行操作

- 对Bean进行操作,在存入Map之间修改,如修改name之类的

更进一步的过程

案例1

生命周期

Bean初始化过程

- Bean的属性填充


循环依赖问题

解决方案



整合第三方框架


基于注解开发

- 有一个值为value:指定Bean的名称

语义化的component,效果跟其一样,其实有语义化

字段注入的注解

@Value:常用来注入配置文件里写的数据
@Value("${spring.rabbitmq.host}") String aa; // 这样就能取到配置的信息
@AutoWired:先根据类型匹配,如果多个再根据变量名再去匹配,还有多个就报错
@Qualifter:这就解决了上面多个同类型的Bean问题
@Resourse:不指定名称时,根据类型,有名称根据名称找

- 其所在类得是被Component注解的,不然根本不扫描这个类
- 默认以方法名为Bean名称

对其他xml配置的注解开发






- springboot中默认会扫描一些包,如果没扫到就得这样配置

AOP



基于xml配置的AOP








基于注解配置的AOP




事务


基于xml


基于注解

Spring-web

