spring
老版本的基础知识
- IoC:控制反转。类A引用类B,如果我们要更改类A引用类C,那么程序就要再测试,发布一次,浪费资源,因此我们可以不在类A中写上new B(),将对象放入Bean层中,需要的时候从Bean层中取,就叫IoC。
- DI:依赖注入:如果Bean层中有些类之间有依赖关系(A引用C),那么我们就在Bean层中把这个问题一并解决了。
- 配置文件:如何从Bean层中取对象呢?
配置文件(ApplicationContext.xml)中写入以下内容:

在需要的地方取对象:

- DI依赖注入的配置:
![]()
- Bean可以有别名:
![]()
- Bean造出来的对象都是单例对象,如果不想是单例对象可以修改
- Bean实例化的方式就是调用相应类的空参构造方法
- 如果想从工厂类中改写为IoC形式
静态工厂(了解):


实例工厂(了解):

FactoryBean:用这个方法会自动调getObject方法


- Bean的生命周期:

- setter注入与构造器注入:
对于一个类中的属性是其他类或者基本属性,两个注入又分为简单类型与引用类型
setter注入:

构造器注入:

- 自动装配:(按照BookServiceImpl中引用的类型(BookDao)在配置文件中找这个类型去返回)
(一般一个类不会配置两遍Bean,所以不用担心重复问题)

- 集合注入:


- 加载Properties文件:
先设置一个context空间

表示读取全部的properties文件

对properties文件内的属性进行读取

注解开发:

- @Component(id):相当于把当前类作为Bean写入配置文件(id:自己起的名)
如果做表现层业务层数据层的开发也可以用:@Controller和@Service和@Repository
- @ComponentScan(name):扫描name写的包名,扫描到各种Bean(写@Component的类)
- @Mapper:1,2相配合进行使用,也可以1,2都不使用,而是在Dao接口上写@Mapper
- @Bean:管理第三方Bean时使用,表示接下来这个方法返回的是一个Bean
- @Configuration:设置当前类为配置类,代替配置文件起作用
- @PropertySource(xxx)表示读取配置文件
- @Scope():表示当前类是否作为单例出现,singleton or prototype
- @Autowired:依赖注入时,在引用的类上写@Autowired就行。因为是按类型自动装配,因此如果要有多个同类型类,未了确定具体引用哪一个,@Autowired下加上@Qualifier(id)即可
- @PathVariable:表示获取前端url上的参数
- @RequestBody:表示以json格式获取前端传来的数据,跟post搭配使用
整合MyBatis与JUnit:
MyBatis:
只需要在config包下加一个MyBatisconfig类就行了,并且原来的MybatisConfig.xml可以不写了
一个包别名,一个是mapper,中间的url,password.....都写在了jdbc.properties文件中,在主配置类中读取jdbc.properties就行了。

JUnit:
- pom文件中加两个依赖

- 之后测试类这么写就可以了

AOP:面向切面编程:
- 概念:在不改动原有代码的基础上增强功能的实现(以代理形式在工作)
![]()
- 实现:
- pom.xml添加依赖:

- 在主包下加一个aop包再加一个类写:
@Component:让Spring扫描这个包
@Aspect:表示这是一个AOP接口
@Pointcut:定义一个切入点,当执行到execution内的方法时,执行切入
@Before:先切入(先执行method方法),再进行update方法

@Around

- 在spring.config方法上加
,表示有aop需要被扫描 - 切入点表达式:

- 案例:
![]()
- 如果要打印返回值,还可以在获取后输出之前修改参数(防止格式出问题)

事务:
- 为了实现原子性事务的一致性,我们首先要在实现类对应接口方法上加注解@Transactional,由于部分·异常是不执行回滚的,我们定义,让程序回滚
![]()
- 在Spring配置类加上事务管理器与注解


- 事务的传播行为:如果我们要实现日志与事务的分离,保证事务出错回滚后日志仍记录,就需要给日志创建一个新的事务,在日志实现类对应的接口方法上加注解
![]()








浙公网安备 33010602011771号