spring框架是一个用于一站式构建企业级应用程序的轻量级解决方案。但spring框架是经过模块化的方式构成,容许咱们只使用须要的部分。spring框架的两大核心:IOC与AOP。html
1.导入相关的jar包web
maven方式下只须要引入spring-context就能够导入相关的jar包spring
2.编写spring核心配置文件applicationContext.xmlexpress
3.编写测试类,实例化容器编程
经过new ClassPathXmlApplicationContext方法数组
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
而后经过实例化容器的gerBean()方法来获取实例服务器
Test bean = context.getBean(Test.class);
IOC就是控制反转,不是一种编程方法,而是一种编程思想。就是把对象的建立过程交给spring ioc容器去管理app
Spring IoC容器管理一个或多个bean。这些bean是使用您提供给容器的配置元数据建立的(例如,以XML <bean/>
定义的形式 )。框架
Bean的初始化方式有三种maven
1.实例化工厂
2.静态工厂
3.构造方法
DI:就是依赖注入,在IOC容器建立对象的时候,初始化内部属性,来定义它们的依赖关系
自动装配:简化xml配置
byName:根据"set" + 属性名首字母大写去查找对应的set方法,若是找到了,则调用该方法来注入
byType:根据set方法中的类型来匹配的。
constructor:根据构造方法来实现自动装配
autowire-candidate="false" 表示该bean不参数自动装配
在开发中咱们也能够用注解的方式代替.xml文件的配置
1.@Component取代<bean class="">
@Component("id") 取代 <bean id="" class="">
2.web开发,提供3个@Component注解衍生注解(功能同样)取代
@Repository :dao层
@Service:service层
@Controller:web层
3.依赖注入,给私有字段设值,也能够给setter方法设值
普通值:@Value(" ")
引用值:
方式1:按照【类型】注入
@Autowired
方式2:按照【名称】注入1
@Autowired
@Qualifier("名称")
方式3:按照【名称】注入2
@Resource("名称")
4.做用域
@Scope("prototype") 多例 !
AOP是面向切面编程,经过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
Spring AOP是用纯Java实现的。不须要特殊的编译过程。Spring AOP不须要控制类加载器层次结构,所以适合在servlet容器或应用程序服务器中使用。
要使用基于XML的配置启用@AspectJ支持,请使用该aop:aspectj-autoproxy
元素,如如下示例所示:
<aop:aspectj-autoproxy/>
启用@AspectJ支持后,在应用程序上下文中定义的任何bean都具备@AspectJ方面的类(具备@Aspect
注释),Spring会自动检测并用于配置Spring AOP。
配置spring
<!-- 面向切面编程 --> <aop:config> <!-- 切面 --> <aop:aspect id="" ref=""> <!-- 切入点 代码块要切入到什么地方 --> <aop:pointcut expression="execution()" id="animalPointCut"/> <!-- 通知 before:在XXX以前 --> <aop:before method="start" pointcut-ref="animalPointCut"/> <!-- 通知 after:在XXX以后 --> <aop:after method="end" pointcut-ref="animalPointCut"/> <!-- 通知 around:在XXX周围环绕 --> <aop:around method="around" pointcut-ref="animalPointCut"/> --> </aop:aspect> </aop:config>
能够用注释代替.xml文件的配置
@Before代替 <aop:before>
@After代替<aop:after>
@Around代替<aop:around>
使用@Around
注释声明around建议。advice方法的第一个参数必须是type ProceedingJoinPoint
。在建议的主体内,调用致使底层方法执行proceed()
的ProceedingJoinPoint
缘由。该proceed
方法也能够传入Object[]
。数组中的值在进行时用做方法执行的参数。
JoinPoint
任何通知方法均可以声明一个类型的参数做为其第一个参数 org.aspectj.lang.JoinPoint
(注意,须要在通知周围声明类型的第一个参数ProceedingJoinPoint
,它是一个子类JoinPoint
。 JoinPoint
接口提供了许多有用的方法:
getArgs()
:返回方法参数。
getThis()
:返回代理对象。
getTarget()
:返回目标对象。
getSignature()
:返回正在建议的方法的描述。
toString()
:打印建议方法的有用说明。
AOP代理
Spring AOP默认使用AOP代理的标准JDK动态代理。这使得任何接口(或接口集)均可以被代理。
直接在对象引用上调用该方法
当客户端代码具备的引用是代理时,事情会稍微改变。