练习1
1.spring配置文件:applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-34.1.xsd">
<bean id="speak1" class="com.leisong.speak.Speak">
<property name="speakPerson">
<value>张嘎</value>
</property>
<property name="speakContent">
<value>三天不打小鬼子,手都痒痒!</value>
</property>
</bean>
<bean id="speak2" class="com.leisong.speak.Speak">
<property name="speakPerson">
<value>Rod</value>
</property>
<property name="speakContent">
<value>世界上有10种人,认识二进制的和不认识二进制的。</value>
</property>
</bean>
</beans>
2.实体类:Speak
package com.leisong.speak;
public class Speak {
private String speakPerson;
private String speakContent;
public void showSpeak(){
System.out.println(this.speakPerson+"说:“"+this.speakContent+"”");
}
public String getSpeakPerson() {
return speakPerson;
}
public void setSpeakPerson(String speakPerson) {
this.speakPerson = speakPerson;
}
public String getSpeakContent() {
return speakContent;
}
public void setSpeakContent(String speakContent) {
this.speakContent = speakContent;
}
}
3.测试
package com.leisong.test;
import com.leisong.speak.Speak;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestSpeak {
@Test
public void test1() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Speak speak1 = (Speak) context.getBean("speak1");
speak1.showSpeak();
Speak speak2 = (Speak) context.getBean("speak2");
speak2.showSpeak();
}
}
练习2
1.定义纸张(Paper)和墨盒(Ink)接口
package com.leisong.paper;
public interface Paper {
public String getSize();
}
package com.leisong.ink;
public interface Ink {
public String getColor();
}
2.定义纸张和墨盒的实现类
package com.leisong.paper.impl;
import com.leisong.paper.Paper;
public class A4Paper implements Paper {
@Override
public String getSize() {
return "A4";
}
}
package com.leisong.paper.impl;
import com.leisong.paper.Paper;
public class B5Paper implements Paper {
@Override
public String getSize() {
return "B5";
}
}
package com.leisong.ink.impl;
import com.leisong.ink.Ink;
public class ColorInk implements Ink {
@Override
public String getColor() {
return "ColorInk";
}
}
package com.leisong.ink.impl;
import com.leisong.ink.Ink;
public class GrayInk implements Ink {
@Override
public String getColor() {
return "GrayInk";
}
}
3.定义打印机类
package com.leisong.printer;
import com.leisong.ink.Ink;
import com.leisong.paper.Paper;
public class Printer {
private Paper paper;
public Paper getPaper() {
return paper;
}
public void setPaper(Paper paper) {
this.paper = paper;
}
public Ink getInk() {
return ink;
}
public void setInk(Ink ink) {
this.ink = ink;
}
private Ink ink;
public void printInfo(){
System.out.println("打印机在"+this.getPaper().getSize()+"上使用"+this.getInk().getColor()+"打印人民币。。。。。");
}
}
4.spring配置文件中添加bean对象
<!-- 配置A4纸张 -->
<bean class="com.leisong.paper.impl.A4Paper" id="A4"/>
<!-- 配置B5纸张 -->
<bean class="com.leisong.paper.impl.B5Paper" id="B5"/>
<!-- 配置彩色墨盒 -->
<bean class="com.leisong.ink.impl.ColorInk" id="color"/>
<!-- 配置黑白墨盒 -->
<bean class="com.leisong.ink.impl.GrayInk" id="gray"/>
<!--配置打印机-->
<bean class="com.leisong.printer.Printer" id="printer">
<property name="paper" ref="B5"/>
<property name="ink" ref="gray"/>
</bean>
5.测试
@Test
public void test(){
ApplicationContext context = new FileSystemXmlApplicationContext("D:\\spring_work\\src\\main\\resource\\applicationContext.xml");
Printer printer = (Printer) context.getBean("printer");
printer.printInfo();
}
练习3
1.用于增强处理的spring配置文件
<!-- 配置数据访问层-->
<bean id="userDao" class="com.leisong.dao.impl.UserDaoImpl"/>
<!-- 配置业务逻辑层-->
<bean id="userService" class="com.leisong.service.impl.UserServiceImpl">
<!-- 将 com.oupeng.dao.impl.UserDaoImpl创建的对象注入到 ud中使用(这个过程是Spring实现的)-->
<property name="ud" ref="userDao"></property>
</bean>
<!-- 配置用于增强处理的Bean组件-->
<bean id="userServiceLogger" class="com.leisong.logger.UserServiceLogger"></bean>
<!-- 开始进行AOP的配置 -->
<aop:config>
<!--先配置切入点-->
<aop:pointcut id="pointCut" expression="execution(public int addNewUser(com.leisong.pojo.User))"/>
<!--切面-->
<aop:aspect id="" ref="userServiceLogger">
<!-- 前置增强-->
<aop:before method="beforePrintLogger" pointcut-ref="pointCut"/>
<!-- 后置增强-->
<aop:after-returning method="afterReturningPrintLogger" pointcut-ref="pointCut" returning="result"/>
</aop:aspect>
</aop:config>
2.用于增强的类
package com.leisong.logger;
import java.util.Arrays;
import java.util.logging.Logger;
import org.aspectj.lang.JoinPoint;
public class UserServiceLogger {
private static final Logger log=Logger.getLogger(String.valueOf(UserServiceLogger.class));
//定义用于前置增强处理的方法
public void beforePrintLogger(JoinPoint jp){
log.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName() +"方法,方法参数:"+Arrays.toString(jp.getArgs()));
}
//定义用于后置增强处理的方法
public void afterReturningPrintLogger(JoinPoint jp,Object result){
log.info("调用"+jp.getTarget()+"的"+jp.getSignature().getName()+"方法,方法返回值:"+result);
}
}
3.数据访问层(dao)
package com.leisong.dao;
import com.leisong.pojo.User;
public interface UserDao {
public int save(User user);
}
package com.leisong.dao.impl;
import com.leisong.dao.UserDao;
import com.leisong.pojo.User;
public class UserDaoImpl implements UserDao {
@Override
public int save(User user) {
System.out.println("保存用户到数据库成功...");
return 1;
}
}
4.业务逻辑层
package com.leisong.service;
import com.leisong.pojo.User;
public interface UserService {
public int addNewUser(User user);
public void addNewUser(String str);
}
package com.leisong.service.impl;
import com.leisong.dao.UserDao;
import com.leisong.pojo.User;
import com.leisong.service.UserService;
public class UserServiceImpl implements UserService {
//注入数据访问层
//UserDaoImpl ud=new UserDaoImpl();
UserDao ud;
public UserDao getUd() {
return ud;
}
public void setUd(UserDao ud) {
this.ud = ud;
}
public int addNewUser(User user) {
ud.save(user);
return 2;
}
public void addNewUser(String str){
System.out.println("addNewUser方法被增强处理了....");
}
}
5.测试
@Test
public void test(){
ApplicationContext context=new FileSystemXmlApplicationContext("D:\\spring_work\\src\\main\\resource\\applicationContext.xml");
UserService ud=(UserService)context.getBean("userService");
User user=new User();
user.setUserName("库里");
user.setPassword("1234");
user.setEmail("leisong_curry@163.com");
user.setId(30);
ud.addNewUser(user);
ud.addNewUser("curry");
}