# 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)")