Spring是一个业务层框架。
一.大致介绍(IoC):
(一)什么是IOC的功能
IoC:控制反转。将创建对象的权限交给Spring框架处理。
(二)步骤一:下载Spring开发包。
(三)步骤二:创建项目,将包导入到项目中。(在学习完maven以后,将Jar坐标写入到pom.xml文件中即可)。
(四)步骤三:创建对应的包结构:(xxxService<接口>. xxxServiceImpl<接口的实现类>)。
(五)步骤四: 将创建的包结构交给框架管理。
(六)步骤六:创建配置文件:applicationContext.xml
在配置文件中填写约束文件。然后配置第三步创建的实现类:
注意: 这个地方要填写实现类(impl )的全路径名。
(七)步骤五:开始进行整合测试。
测试类创建一个demo1:
首先要创建工厂,加载核心配置文件:ApplicationContext ac =
new ClassPathXmlApplicationContext(“applicationContext.xml”);
ac.getBean(“xxx”) --> xxx是配置文件中的<bean的Id值>
创建接口的对象<好处在与耦合度高>
一: 依赖注入: 在service中注入一个Dao的对象(依赖)
交给Spring容器自动注入。
(1)采用在Application配置文件中配置:
1) 演示依赖注入
<bean id=”” class=”” > xxx属性自己配置 </bean>
依赖(Dao层全路径名)
<bean id=”” class=””>
<property name=”” ref=”” /> (引用Dao层的Id值) 注入xxxServiceImpl中)
</bean>
① Set方法。(pojo中设置set方法)
<bean id=”” class=””>
<property name=”” value=”” />
</bean>
②构造方法的注入:
<bean id=”” class=””>
<constructor-arg name=”” value=”” />
<constructor-arg name=”” value=”” />
</bean>
还可以采用ref引入的方式 引入一个已经配置好的类。
(2)但不采用在配置文件中配置注入问题, 使用标签在Dao层次写入标签@Repository
在xxxServiceImpl层次写入@Service(xxxService).然后创建Dao的对象。
(3)单一属性值的设置:
2) <Bean id=”” class=””>
<property name = “属性名” value = “属性值”>
</Bean>
3) <Bean id=”” class=””>
<property name = “属性名”>
<list>
<value>xxx</value>
</list>
</property>
</Bean>
(此处是list集合 同时也可以是set集合 将list改set即可,)
4) 3) <Bean id=”” class=””>
<property name = “属性名”>
<map>
<entry key=”” value=”” / >
<entry key=”” value=”” / >
<entry key=”” value=”” / >
<map>
</property>
</Bean>
二: spel表达式的方式(简单了解一下就行)
在注入的value的值中 采用value=”#{xxx}”
Xxx:如果 值是字符串的话 加单引号
值的话直接填写。
可以填写对象,对象的属性,对象得方法。
三:依赖注入标签的简单概述:
①首先开启注解扫描;
Context约束下面的标签:
<context : component-scan base-package=”xxx”> (xxx-->document)
<context : component-scan>
②在XxxServiceImpl 中配置component(); 作用在当前类上。
中间如果不配置value值得就是类名但是首字母小写。
但是比较原始。 了解就好。
③根据component 衍生出来得三个注解。 不同得层次有不同得注解。
Dao层----->Response 持久层 (操作数据库)
Service层----->Service(value = “”) 业务层 (方法及具体的实现)
Controller层----->Controller(value = “”) WEB层
④ 数据类型的注入:
基本数据类型的注入:在属性名上面添加@Value (value = “”)
引用类型的注入: @Autowired 按照类型自动装配
按名称注入: @Qualifier(value = “”) 根据Service的value进行装配
注入的缺点在于要两个一起用:
第一行写@Autowired 第二行写@Qualifier
⑤ java提供的一个注解,Spring框架支持。
Resource(name = “”) : 根据名称装配
二:大致介绍(AOP)
1) 面向切面的编程。
2) 底层原理 JDK动态代理。(简单说就是接口实现类)
Proxy.NewProxyInstance(xxx.getClass().getClassLoader() -->类的加载器
xxx.getClass().Interfaces() --->接口
New InvocationHandler -->匿名内部类
)
在测试类中拿到代理对象 用代理对象调用方法。
代理对象执行的时候。Invoke会执行一次。
3)AOP的术语:
Joinpoint 连接点 简单来说指的就是方法。
Pointcut 切入点 想对那个方法进行更改,该方法就是切入点。
Advice 通知 拦截以后的通知。具体想做什么功能。
Target 目标对象 代理的目标对象。(简单指想要被增强的实现类)。
Proxy 代理 JDK接口代理 和cglib的动态代理。
Aspect 切面 切入点(自己配置)和通知合二为一的东西。
详解切面的配置xml文档:
①先配置aop(别名)约束.
②再配置切面类<bean id = “” class = “” />
③(1)配置通知。(先打< 观察一下有不同种类型)
<aop : config>
<aop:aspect ref = “xxx”> 第二步所配置的id值
<aop:xxx mothed = “xxx” pointcut=”xxx”>
不同类型 不同的方法 切入点
切入点---> (execution(piblic *(void..) xxx)) xxx->方法全路径名
</aop:asoect>
</aop : config>
③(2)通知可以配置的切面类中进行注解的配置;但需要开启自动代理
<aop:aspectJ-autoproxy / > 开启自动代理
3) 操作事物:
①PlatformTransactionManager(接口) 平台事物管理器
两个接口的实现类:
DateSrouceTransactionManager
HibernateTransactionManager
两个重要方法commit 和 rollback .
②TransactionDifinition 设置事物的隔离级别.
TransactionStatus 显示事物的状态.