# learning-spring
**Repository Path**: lotusfall/learning-spring
## Basic Information
- **Project Name**: learning-spring
- **Description**: Spring框架学习记录
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-02-26
- **Last Updated**: 2023-02-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
基于xml的Ioc
(1)创建bean对象
(2)给创建的对象赋值
1.使用setter注入
a.简单类型注入,使用value属性
b.引用类型注入,使用ref属性
必须要注意:使用setter注入必须提供午餐的构造方法
2.使用构造方法注入
Student stu = new Student("张三",22);
a.使用构造方法的参数名称进行注入值
b.使用构造方法参数下标注入值
c.使用默认的构造方方法的参数的顺序注入值
基于注解的Ioc
也称为DI(Dependency Injection),他是Ioc的具体实现技术
(1)创建对象的注解
@Component:可以创建任意对象
默认的命名是对象的驼峰命名法,也可以指定对象的命名
@Controller:专门用来创建控制器对象,可以接收用户请求,也可以返回处理结果给客户端
@Service:专门用来创建业务逻辑层的对象,负责向下访问数据层,处理完毕后的结果返回给界面层
@Repository:专门用来创建数据访问层的对象,负责数据库中增删改查的所有操作
(2)依赖注入的注解
值类型的注入:八种基本数据类型 + String
@Value
引用类型的注入:
@Autowired:使用类型注入值,从整个Bean工厂中搜索同源类型的进行注入
同源类型:
被注入的类型与注入的类型是完全相同的类型
被注入的类型与注入的类型是父子类
被注入的类型与注入的类型是接口
在有父子类的情况下,使用按类型注入就意味着有多个可注入的对象,此时按照名称进行二次筛选,
选中与被注入对象相同名称的对象进行注入
@Autowired + @Qualifier:使用名称注入值
添加包扫描的方式:
1.单个包扫描:
2.多个包扫描:多个包
3.扫描根包(不推荐)
为应用指定多个Spring配置文件
1.拆分配置文件策略:
按层拆
applicationContext_controller.xml
applicationContext_dao.xml
按功能拆
applicationContext_users.xml
Spring配置的整合
1.单个文件导入
2.多个文件导入
面向切面编程AOP
AOP(Aspect Orient Programming)
切面:公用的,通用的,重复的功能称为切面
Spring支持AOP的编程,常用的有以下几种:
1)Before通知:在目标方法被调用前调用,涉及接口org.springframework.aop.MethodBeforeAdvice;
2)After通知:在目标方法被调用后调用,涉及接口为org.springframework.aop.AfterReturningAdvice;
3)Throws通知:目标方法抛出异常时调用,涉及接口org.springframework.aop.ThrowsAdvice;
4)Around通知:拦截对目标对象方法调用,涉及接口为org.aopalliance.intercept.MethodInterceptor。
AOP常用的术语
1)切面:就是那些重复的,公共的,通用的功能称为切面,例如:日志,事务,权限.
2)连接点:就是目标方法.因为在目标方法中要实现目标方法的功能和切面功能.
3)切入点(Pointcut):指定切入的位置,多个连接点构成切入点.切入点可以是一个目标方法,可以是一个类中的所有方法,可以是某个包下的所有类中的方法.
4)目标对象:操作谁,谁就是目标对象.
5)通知(Advice):来指定切入的时机.是在目标方法执行前还是执行后还是出错时,还是环绕目标方法切入切面功能.
AspectJ
面向切面的框架,扩展了java语言,提供了强大的切面实现,
1)前置通知@Before
2)后置通知@AfterReturning
3)环绕通知@Around
4)最终通知@After
切入点表达式:execution(访问权限 方法返回值 方发声明(参数) 异常类型)
execution(方法返回值 方发声明(参数))
* 通配符,表示任意个字符
.. 如果出现在方法的参数中,则代表任意参数
.. 如果出现在路径中,则代表本路径及其所有的子路径
1)创建业务接口
2)创建业务实现
3)创建切面类,实现切面方法
4)在applicationContext.xml文件中进行切面绑定
AspectJ框架切换JDK动态代理和CGLib动态代理
===>默认是JDK动态代理,取时必须使用接口类型
==>设置为CGLib子类代理,可以使用接口和实现类接
记住:使用接口来接,永远不出错.
切入点表达式别名:
@Pointcut(value = "public * com.lotusfall.s03.SomeService.doSome(String,int)")