Part2
1.基于注解的IoC配置
首先在xml文件中配置component-scan,里面配置包名,表明要扫描此包下的注解
<?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" //注意这里也发生了变化(从spring官方网页上拷贝)
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--用下面这个配置,就会扫描这个包及其子包所有类上的注解-->
<context:component-scan base-package="com.stay"></context:component-scan>
</beans>
1.1 用于创建对象的注解
相当于xml中的创建对象的配置
@Component
书写位置:类前
属性value:用于指定bean的id对象,默认值是当前类名并且首字母小写
其他形式:@Controller 用在表现层(ui)
@Service 用在业务层 (service)
@Repository 用在持久层(DAO)
1.2 用于注入bean类型数据的注解
相当于标签中的
书写位置:可以是变量上也可以是方法上
@Autowired
自动按照类型注入,只要容器中有唯一一个bean对象和要注入的变量类型匹配,就可以注入成功
如果IOC中有多个类型匹配,首先按照类型圈定匹配对象,再根据标量名称从圈定的范围继续查找
@Qualifier
在按照类型注入的基础上再按照名称注入,在给类成员注入时不能单独使用(要和Autowired组合在一起)
属性value:用于指定注入bean的id
@Resouece
直接按照bean的id注入,可以独立使用
属性name:用于指定bean的id
1.3 用于注入基本类型和String类型数据的注解
@Value
属性value:用于指定数据的值,可以使用spring中的SpEL 写法:${表达式}
1.4 用于改变作用范围的注解
相当于标签中的
@Scope
用于指定bean的作用范围
属性value:指定范围的取值 常用取值:singleton prototype
1.5 和生命周期相关的注解
相当于标签中使用init-method和destory-method
@PostConstruct 用于指定初始化方法
@PreDestory 用于指定销毁方法
2.spring新注解
旨在实现没有xml配置存在的纯注解spring环境
@Configuration
作用:指定当前类是一个配置类
细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写
@ConponentScan
作用:用于通过注解指定spring在创建容器时要扫描的包
属性basePackages:值是包名
配置这个注解就相当于配置了<context:component-scan base-package=“com.stay”> </context:component-scan>
@Bean
作用:用于把当前方法的返回值作为bean对象存入spring的Ioc容器中
属性name:用于指定bean的id 默认值是当前方法名称
@Import
作用:用于导入其他的配置类
属性value:用于指定其他配置类的字节码
写法:Import(类名.class)
应用场景:有一个大的总体的配置类,还有一些小的配置类,为了在创建对象传参时只写大配置类的明治,就要在大配置类中用Import把小配置类引入
@PropertySource
作用:用于指定properties文件的位置
属性value:指定文件的名称和路径
写法:PropertySource(“classpath:jdbcConfig.properties”)
补充知识:
如果要连接数据库,那么数据库的有关信息储存在一个propertiess文件中
包括四部分内容:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springaccount
jdbc.username=root
jdbc.password=123456789
支持它的jar包:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
Part3
1.AOP简介
1.1 AOP的概念
AOP:面向切面编程
作用:在程序运行期间,不修改源码对已有的方法进行增强
优势:减少重复代码 提高开发效率 维护方便
实现方式:使用动态代理技术
1.2 AOP相关术语
Joinpoint(连接点):被拦截到的点,在spring中,这些点指方法(业务层接口中的方法),因为 spring只支持方法类型的连接点
Pointcut(切入点):被增强的方法
Advice(通知/增强): 拦截到Joinpoint后要做的事情
通知分为:前置通知,后置通知,异常通知,最终通知和环绕通知(比如说整个invoke方法)
Introduction(引介):一种特殊的通知,在不修改类代码的前提下,Introduction可以在运行期为类动 态地添加一些方法
Target(目标对象):被代理对象
Weaving(织入):把增强应用到目标对象来创建新的代理对象的过程
Proxy(代理):代理对象,一个类被AOP织入增强后,就产生一个结果代理类
Aspect:切入点和通知的结合