Spring
2021-03-08 20:07:54 0 举报
AI智能生成
关于Spring,初学者可以看看
作者其他创作
大纲/内容
Spring
Ioc(控制反转)
谁控制谁?当然是IoC 容器控制了对象;
控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)
为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了
DI(依赖注入)
谁依赖于谁?当然是应用程序依赖于IoC容器
为什么需要依赖?应用程序需要IoC容器来提供对象需要的外部资源
谁注入谁?很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象
注入了什么?就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)简单来说就是Bean
依赖注入的方式
Set注入
<bean name=\"dataSource\" class=\"com.alibaba.druid.pool.DruidDataSource\"> <property name=\"driverClassName\" value=\"com.mysql.jdbc.Driver\"/> <property name=\"url\" value=\"jdbc:mysql://localhost:3306/test?characterEncoding=utf8\"/> <property name=\"username\" value=\"root\"/> <property name=\"password\" value=\"123456\"/> </bean>
构造注入
<bean id=\"jdbcTemplate\" class=\"org.springframework.jdbc.core.JdbcTemplate\"> <constructor-arg name=\"dataSource\" ref=\"dataSource\"/> </bean>
自动注入
<bean id=\"iUserDao\" class=\"dao.Impl.UserDaoImpl\"/> 与 @Autowired 一起使用
AOP(面向切面编程)
开发术语
Aspect(切面)
通常是一个类,里面可以定义切入点和通知
xmlns:aop=\"http://www.springframework.org/schema/aop\" 名空间<aop:config> <!--切面--> <aop:advisor advice-ref=\"myBeforeAdvice\" pointcut-ref=\"myPointcut\"/> <aop:advisor advice-ref=\"myAfterAdvice\" pointcut-ref=\"myPointcut\"/> <aop:advisor advice-ref=\"myThrowsAdvice\" pointcut-ref=\"myPointcut\"/> <aop:advisor advice-ref=\"myMethodInterceptor\" pointcut-ref=\"myPointcut2\"/> </aop:config>
Joint point(连接点)
程序执行过程中明确的点,一般是方法的调用
Pointcut(切点)
需要做某些处理(如打印日志、处理缓存等等)的连接点
<aop:config> <!--切点--> <aop:pointcut id=\"myPointcut\" expression=\"execution(int com.wk.aop.OperationImpl.*(..))\"/> <aop:pointcut id=\"myPointcut2\" expression=\"execution(* com.wk.aop.OperationImpl.print())\"/> </aop:config>
Advice(增强或者通知)
AOP在特定的切入点上执行的增强处理
前置通知@Before
<bean id=\"myBeforeAdvice\" class=\"com.wk.aop.MyBeforeAdvice\"/><!--前置通知-->
后置通知@After
<bean id=\"myAfterAdvice\" class=\"com.wk.aop.MyAfterAdvice\"/> <!--后置通知-->
异常通知@AfterThrowing
<bean id=\"myThrowsAdvice\" class=\"com.wk.aop.MyThrowsAdvice\"/> <!--异常通知-->
环绕通知@Around
<bean id=\"myMethodInterceptor\" class=\"com.wk.aop.MyMethodInterceptor\"/> <!--环绕通知-->
Target(目标对象)
引入中提到的目标类,也就是要被通知的对象。也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。
<!--原始对象--> <bean class=\"com.wk.aop.OperationImpl\"/>
Weaving(织入)
把切面应用到目标对象来创建新的代理对象的过程
动态代理可以在不改变原来代码的情况下实现功能的增强
JDK动态代理
基于接口,默认使用
CGLIB代理
基于子类,在需要代理类而不是代理接口的时候,Spring会自动切换为使用CGLIB代理
切面、切点、通知三者结合起来用
0 条评论
回复 删除
下一页