第一天
一、spring入门
1.1IOC
①IOC:inversion of control(控制反转)
控制反转:将对象的创建交给spring管理
1.2创建接口和类
接口
public interface UserDao {
public void save();
}
实现类:
public class UserDaoImpl implements UserDao {
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public void save() {
// TODO Auto-generated method stub
System.out.println("UserDaoImpl执行了。。。。。" + name);
}
}
1.3将实现类交给spring管理
<!-- ==================Spring的入门配置================ -->
<bean name="userDao" class="com.itheima.spring.demo1.UserDaoImpl">
<property name="name" value="李东"/>
</bean>
1.4测试类
public void demo2(){
//创建Spring的工厂
ApplicationContext applicationcontext = new ClassPathXmlApplicationContext("applicationcontext.xml");
UserDao userDao = (UserDao) applicationcontext.getBean("userDao");
userDao.save();
}
1.5DI
DI:依赖注入,前提必须要有ioc,spring管理这个类的时候将类的依赖属性注入进来
1.6spring的工厂类
①老版本的工厂类:BeanFactory(调用getBean的时候才会生成类的实例)
②新版本的工厂类:ApplicationContext(加载配置文件的时候,就会将spring管理的类都实例化)
新版本的工厂类有两个实现类
ClassPathXmlApplicationContext(加载类路径下的配置文件)
FileSystemXmlApplicationContext(加载文件系统下的配置文件)、
1.7配置文件的一些细节
①Bean标签的id和name的配置
id:使用了约束中的唯一约束。不能出现特殊字符
name:没有唯一约束(理论上可以重复出现,实际开发不能出现),可以出现特殊字符
②bean作用范围的配置
scope:配置bean的作用范围
singleton:默认的,spring会采用单例模式创建这个对象
prototype:多例模式(spring与Struts2整合的时候会用到)
request:应用到web项目中,spring创建这个类之后,将这个类存入到request范围中
session:应用到web项目中,spring创建这个类之后,将这个类存入到sessiont范围中
globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。
二、属性注入
2.1构造方法的注入
2.2set方法的方式
2.3P名称空间的属性注入
2.3spel的方式
2.4集合属性的注入
<!-- Spring的集合属性的注入============================ -->
<!-- 注入数组类型 -->
<bean id="collectionBean" class="com.itheima.spring.demo5.CollectionBean">
<!-- 数组类型 -->
<property name="arrs">
<list>
<value>王东</value>
<value>赵洪</value>
<value>李冠希</value>
</list>
</property>
<!-- 注入list集合 -->
<property name="list">
<list>
<value>李兵</value>
<value>赵如何</value>
<value>邓凤</value>
</list>
</property>
<!-- 注入set集合 -->
<property name="set">
<set>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</set>
</property>
<!-- 注入Map集合 -->
<property name="map">
<map>
<entry key="aaa" value="111"/>
<entry key="bbb" value="222"/>
<entry key="ccc" value="333"/>
</map>
</property>
</bean>
三、分模块开发
3.1加载配置文件的时候加载多个
3.2在一个配置文件中引入多个配置文件
第二天
Spring的IOC的注解开发
注解的入门
引入aop的包
引入context约束
<context:component-scan />
使用注解开发
@Component :定义Bean
@Controller :WEB层
@Service :Service层
@Repository :DAO层
属性注入:
普通属性 :@Value
对象属性 :@Resource
@Autowired :按类型注入属性,按名称@Qulifier
XML方式和注解方式比较
XML方式 :适用性更广,结构更加清晰。
注解方式 :适用类是自己定义,开发更方便。
XML和注解的整合开发
XML定义类
注解属性注入
Spring的AOP的基于AspectJ的XML的开发
AOP的概述
AOP:面向切面编程,是OOP的扩展和延伸,是用来解决OOP遇到问题。
Spring的AOP
底层的实现
JDK的动态代理
Cglib的动态代理
AOP的相关术语
连接点:可以被拦截的点。
切入点:真正被拦截的点。
通知:增强方法
引介:类的增强
目标:被增强的对象
织入:将增强应用到目标的过程。
代理:织入增强后产生的对象
切面:切入点和通知的组合
AOP的入门开发
引入jar包
编写目标类并配置
编写切面类并配置
进行aop的配置
aop:config
<aop:pointcut expression=”execution(表达式)” id=”pc1”/>
<aop:aspect >
<aop:before method=”” pointcut-ref=”pc1”/>
</aop:aspect>
</aop:config>
通知类型
前置通知
后置通知
环绕通知
异常抛出通知
最终通知
切入点表达式写法
一、 AOP入门
1.1编写目标类并完成配置
public class ProductDaoImpl implements ProductDao {
@Override
public void save() {
System.out.println("保存商品");
}
@Override
public void update() {
System.out.println("更新商品");
}
@Override
public void find() {
System.out.println("查询商品");
}
@Override
public void delete() {
System.out.println("删除商品");
}
}
1.2切面类与配置
public class MyAspectXML {
public void checkPri(){
System.out.println("权限校验");
}
}
<!-- 通过AOP的配置完成对目标类产生代理 -->
<aop:config>
<aop:pointcut expression="execution(* com.itheima.spring.demo3.ProductDaoImpl.save(..))" id="pointcut1"/>
<!-- 配置切面 -->
<aop:aspect ref="myAspect">
<aop:before method="checkPri" pointcut-ref="pointcut1"/>
</aop:aspect>
</aop:config>
第三天
一、spring的AOP基于aspectJ的注解开发
1.1编写目标类并配置
1.2编写切面类并配置
1.3使用注解的AOP对象目标类进行增强
1.4测试类
1.5注解AOP开发的类型
@Before :前置通知
@AfterReturning :后置通知
@Around :环绕通知
@AfterThrowing :异常抛出通知