MyEclipse 工具 Spring Ioc、aop


注:【网页版】右上方的悬浮框( 有目录索引 )


一、IoC

1-1】环境配置

 【1-1-1】导入 jar 包

Spring 官网 搜索 spring-framework-3.2.13.RELEASE-dist 并下载
内部 libs 有下面四个 jar 包
在这里插入图片描述

 【1-1-2】log4j.properties(日志配置文件)

新建 resources 包,在包下创建 log4j.properties 文件

# rootLogger是所有日志的根日志,修改该日志属性将对所有日志起作用
# 下面的属性配置中,所有日志的输出级别是info,输出源是con
log4j.rootLogger=info,con
# 定义输出源的输出位置是控制台
log4j.appender.con=org.apache.log4j.ConsoleAppender
# 定义输出日志的布局采用的类
log4j.appender.con.layout=org.apache.log4j.PatternLayout
# 定义日志输出布局
log4j.appender.con.layout.ConversionPattern=%d{MM-dd HH:mm:ss}[%p]%c%n -%m%n

 【1-1-3】SpringDemo.class(实体类)

public class SpringDemo{
	
	private String name = null;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public void print() {
		System.out.println("Hello," + this.getName() + "!");
	}
}

 【1-1-4】ApplicationContext.xml(Spring 配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

	<bean id="springDemo" class="com.debj.SpringDemo">
		<!--name 属性可以指定多个别名,名字之间使用逗号、分号、空格 分隔-->
		<property name="name" value="Jack" />
	</bean>
</beans>

1-2】测试

    @Test
    public void helloSpring() {
    	// FileSystemXmlApplicationContext 也可以读取配置信息,与下行代码有区别
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        SpringDemo helloSpring = (SpringDemo) context.getBean("springDemo");
        helloSpring.print();
    }

二、aop

2-1】环境配置(下载 jar 包 及 基本类)

Spring 官网 所需下载的 jar 包 类结构图
在这里插入图片描述 在这里插入图片描述

类过多,暂且放于一个代码块中

// 实体类
public class User {
	private Integer id;
	private String username;
	private String password;
	private String email;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password="
				+ password + ", email=" + email + "]";
	}
	public User(Integer id, String username, String password, String email) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
		this.email = email;
	}
	public User() {
		super();
	}
}
// dao 层接口
public interface UserDao {
	public void save(User user);
}
// dao 层,实现接口
public class UserDaoImpl implements UserDao {
	@Override
	public void save(User user) {
		System.out.println("保存用户信息:"+user);
	}
}
// 业务层
public interface UserService {
	public void addUser(User user);
}
// 业务层,实现方法
public class UserServiceImpl implements UserService {

	private UserDao userDao;
	
	public UserDao getUserDao() {
		return userDao;
	}
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	
	@Override
	public void addUser(User user) {
		userDao.save(user);
	}
}

2-2】编写增强处理类

com.debj.aop.UserServiceLogger.java 增强处理类(后面在方法执行前、后。要调用的方法)

public class UserServiceLogger {

	private static Logger log = Logger.getLogger(UserServiceLogger.class);
	// 前置增强处理
	public void before(JoinPoint jp){
		log.info("调用 "+jp.getTarget()+" 的 "+jp.getSignature()+" 方法,方法参数:"+Arrays.toString(jp.getArgs()));
	}
	// 后置增强处理,resutl:SpringAOP 注入进来的对象的返回
	public void afterReturning(JoinPoint jp,Object result){
		log.info("调用 "+jp.getTarget()+" 的 "+jp.getSignature()+" 方法,方法返回值:"+result);
	}	
}

2-3】ApplicationContext.xml(Spring 配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<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"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd">
	
	<bean id="userDao" class="com.debj.dao.impl.UserDaoImpl" />
	<bean id="userService" class="com.debj.service.impl.UserServiceImpl">
		<property name="userDao" ref="userDao"/>
	</bean>
	<!-- 声明增强处理类的 bean 元素 -->
	<bean id="theLogger" class="com.debj.aop.UserServiceLogger"/>
	<aop:config>
		<!-- 定义切入点 即哪个方法,需要增强-->
		<aop:pointcut id="pointcut" expression="execution(public void addUser(com.debj.entity.User))"/>
		<!-- 织入 增强处理-->
		<aop:aspect ref="theLogger">
			<!-- 前置增强,引入切入点,即调用方法前,执行哪个方法 -->
			<aop:before method="before" pointcut-ref="pointcut" />
			<!-- 前置增强,引入切入点,注入目标方法返回值 result -->
			<aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result" />
		</aop:aspect>
	</aop:config>
</beans>

2-4】测试类

此处,本机 MyEclipse 与 JDK 8 不完全兼容,运行结果,来自于 idea 工具

public class AOPTest {
    public static void main(String[] args) {

		ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
		UserService userService = (UserService) context.getBean("userService");
		User user = new User(1,"Jack","123456","[email protected]");
		userService.addUser(user);
	}
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ice_debj/article/details/104944287