文章目录
注:【网页版】右上方的悬浮框( 有目录索引 )
一、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","Jack@163.com");
userService.addUser(user);
}
}