Spring Day 2
**Spring框架的IOC之注解方式的快速入门**
步骤一:导入注解开发所有需要的jar包
步骤二:创建对应的包结构,编写Java的类:接口到实现类
步骤三:在src的目录下,创建applicationContext.xml的配置文件,然后引入约束。注意:因为现在想使用注解的方式,那么引入的约束发生了变化
步骤四:在applicationContext.xml配置文件中开启组件扫描
可以采用如下配置
<context:component-scan base-package="com.itheima"/> 这样是扫描com.itheima包下所有的内容
步骤五:在UserServiceImpl的实现类上添加注解
* @Component(value="userService") -- 相当于在XML的配置方式中 <bean id="userService" class="...">//给这个类加了一个id值。
步骤六:编写测试代码
public class SpringDemo1 {
@Test
public void run1(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us = (UserService) ac.getBean("userService");
us.save();
}
}
**Spring框架中Bean管理的常用注解**
1. @Component:组件.(作用在类上)
2. Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的)
* @Controller -- 作用在WEB层
* @Service -- 作用在业务层
* @Repository -- 作用在持久层(此三个是属于ioc定义id的)
* 说明:这三个注解是为了让标注类本身的用途清晰,Spring在后续版本会对其增强
3. 属性注入的注解(说明:使用注解注入的方式,可以不用提供set方法)
* 如果是注入的普通类型,可以使用value注解
* @Value -- 用于注入普通类型(注入)
* 如果注入的是对象类型,使用如下注解
* @Autowired -- 默认按类型进行自动装配
* 如果想按名称注入
* @Qualifier -- 强制使用名称注入
* @Resource -- 相当于@Autowired和@Qualifier一起使用///Resource常用
* 强调:Java提供的注解
* 属性使用name属性
**Spring框架整合JUnit单元测试**
1. 为了简化了JUnit的测试,使用Spring框架也可以整合测试
2. 具体步骤
* 要求:必须先有JUnit的环境(即已经导入了JUnit4的开发环境)!!
* 步骤一:在程序中引入:spring-test.jar
* 步骤二:在具体的测试类上添加注解
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class SpringDemo1 { @Resource(name="userService") private UserService userService; @Test public void demo2(){ userService.save(); } }
-------------------------------------------------------------------------------------------
### 技术分析之Spring框架的核心功能之AOP技术 ###///对DAO层进行增强功能。
OOP:面向对象编程,AOP:面向切面编程
好处: AOP
* 可以在不修改源代码的前提下,对程序进行增强
具体:joinpoint(连接点):被拦截到的方法
pointcut:(切入点):对哪些joinpoint进行拦截的定义
advice(通知/增强):拦截到join point之后要做的事情就是通知。分为前置通知,后置通知,异常通知,环绕通知。
aspect(切面) -- 是切入点和通知的结合,以后咱们自己来编写和配置的
----------------------------------------------------------------------------------
**技术分析之AspectJ的XML方式完成AOP的开发**
步骤一:创建JavaWEB项目,引入具体的开发的jar包
步骤二:创建Spring的配置文件,引入具体的AOP的schema约束
步骤三:创建包结构,编写具体的接口和实现类
步骤四:将目标类配置到Spring中
<bean id="customerDao" class="com.itheima.demo3.CustomerDaoImpl"/>
步骤五:定义切面类
public class MyAspectXml {
// 定义通知
public void log(){
System.out.println("记录日志...");
}
}
步骤六:在配置文件中定义切面类
<bean id="myAspectXml" class="com.itheima.demo3.MyAspectXml"/>
步骤七:在配置文件中完成aop的配置
<aop:config>
<!-- 引入切面类 -->
<aop:aspect ref="myAspectXml">////这个时候myAspectXml这个类被加入了切面。
<!-- 定义通知类型:切面类的方法和切入点的表达式 -->
<aop:before method="log" pointcut="execution(public * com.itheima.demo3.CustomerDaoImpl.save(..))"/>
</aop:aspect>
</aop:config>
完成测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Demo3 {
@Resource(name="customerDao")
private CustomerDao customerDao;
@Test
public void run1(){
customerDao.save();
customerDao.update();
customerDao.delete();
}
}