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