Spring是什么,IOC、AOP

Spring

ioc

控制反转loC(Inversion of Control),是-种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法。 没有IoC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。

控制反转是一-种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI) .

bean在配置文件中就相当于new 了一个对象

value:具体的值,基本数据类型

ref:Spring容器中创建好的对象

在getBean的时候会把配置文件中的bean都初始化。

bean的属性

​ name:可以为bean配置别名,可以是多个

依赖注入:
构造器注入:在初始化对象的时候在构造方法中注入
<bean>
	<constructor-arg name="" ref="" value=""/>
</bean>

或者引入c命名空间:xmlns:c=“http://www.springframework.org/schema/c”

<bean c:属性名=""></bean>

前提是需要pojo中有无参有参构造方法

set注入:
<bean>
	<property name="" ref="" value=""/>
</bean>

或者引入p命名空间:xmlns:p=“http://www.springframework.org/schema/p”

<bean p:属性名=""></bean>

bean的作用域:

​ 单例模式:每次从容器get的时候都是同一个对象

<bean scope="singlton"></bean>

​ 原型模式:每次从容器get的时候,都会重新生成对象

<bean scope="propotype"></bean>

其余作用域适用于web开发:

request、session、application

applicationContext:应用程序上下文。 个人理解为程序运行环境、容器
自动装配

bean的autowire属性,取值byName、byType

byName能够在spring容器中获取id和自己对象的属性同名的bean

byType能够在spring容器中获取类型和自己对象的属性类型相同的bean.

使用注解自动装配:@Autowired

前提:1.导入约束:context约束

2.在配置文件中开启注解支持:

<context:annotation-confing/>

使用之后不需要写set方法

@Autowired(required=false)//required值为false的话表示被这个注解标注的属性可以为null
@Qualifier(value="")//可以和@Autowired组合使用,作用是注入id与value值相同的bean

spring4之后使用注解开发需要依赖aop

<!--指定要扫描的包,这个包下的注解就会生效-->
<context :component- scan base-package=""/>

纯注解开发

在一个类前面使用@Confinguration表示这个类相当于spring的配置文件(application.xml),或者。在这个配置类里面的方法上面加上@Bean注解相当于配置文件里面的方法名为bean的id,返回值是bean的class,return返回的是要注入到bean 中的内容。

@Component使用在类上,表示将这个类交给spring管理,相当于,类名就是id。其在mvc三层架构中又衍生出三种:

dao:@Repository service:@Service controller:@Controller

Spring AOP:面向切面编程

个人见解:

AOP是在不改变原来代码基础的情况下对原来代码的增强,例如添加一些功能,原理应该是基于动态代理模式实现的。所谓面向切面编程是把原来的项目想象成纵向,切面就是在这个纵向项目的某个点增加一些功能,并且不修改原代码,且不影响原来代码功能的实现。所以我认为AOP适用于对项目完成之后的增加功能。以上仅是个人见解,如有不足,请多多指正。

配置方式:

<aop:config>
	<!--配置切入点 -->
	<aop:pointcut expression="" id=""/>
	<!-- 配置切面-->
	<aop:aspect id="" ref="">
		<!-- 配置前置通知 -->
		<aop:before method="" pointcut-ref=""/>
		<!-- 配置后置通知 -->
		<aop:after-returning method="" pointcut-ref=""/>
		<!-- 配置异常通知 -->
		<aop:after-throwing method="" pointcut-ref=""/>
		<!-- 配置最终通知 -->
		<aop:after method="" pointcut-ref=""/>
		<!-- 配置环绕通知 -->
		<aop:around method="" pointcut-ref=""/>
	 </aop:aspect>
</aop:config>

method:指定通知中方法的名称。 pointct:定义切入点表达式 pointcut-ref:指定切入点表达式的引用.异常和后置通知只能执行一个

用注解方式使用AOP需要:

  1. 在配置文件中导入 context 的名称空间
  2. 开启 spring 对注解 AOP 的支持
<aop:aspectj-autoproxy/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值