From 1f9b78069640e742496574ecdc3fb3222b355054 Mon Sep 17 00:00:00 2001
From: fancyears <1243093769@qq.com>
Date: Mon, 29 Apr 2019 17:52:25 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E9=87=87=E7=94=A8=E6=8B=A6=E6=88=AA?=
=?UTF-8?q?=E5=99=A8=E8=BF=9B=E8=A1=8C=E6=8B=A6=E6=88=AAdao=E5=B1=82?=
=?UTF-8?q?=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
spring/pom.xml | 38 +++++
spring/spring.iml | 15 +-
spring/src/main/java/bean/Parent.java | 8 +-
spring/src/main/java/config/BootConfig.java | 6 +-
.../src/main/java/config/BootOutOfConfig.java | 8 +-
.../src/main/java/config/BootWithConfig.java | 7 +-
spring/src/main/java/dao/MyUserDao.java | 23 +++
spring/src/main/java/dao/UserDao.java | 42 ++----
.../src/main/java/dao/impl/MyUserDaoImpl.java | 59 ++++++++
.../src/main/java/dao/impl/UserDaoImpl.java | 87 +++++++++++
.../DisplayExecuteSqlInterceptor.java | 135 ++++++++++++++++++
.../src/main/java/log/LoggerWithoutXml.java | 12 +-
spring/src/main/java/mapper/UserMapper.java | 23 +++
spring/src/main/java/service/BookService.java | 6 +-
.../src/main/java/service/EntityService.java | 8 +-
.../java/service/SimplePlayerService.java | 10 +-
.../src/main/java/service/UserDetector.java | 1 -
spring/src/main/java/service/UserRelease.java | 10 +-
spring/src/main/java/service/UserService.java | 10 +-
spring/src/main/resources/Beans.xml | 43 ++++--
spring/src/main/resources/log4j2.xml | 18 +++
spring/src/main/resources/resource.properties | 1 +
.../java/day4/TestAnnontionWithoutXml.java | 8 +-
spring/src/test/java/day4/TestImport.java | 2 -
spring/src/test/java/day4/TestJSR250.java | 2 +-
.../test/java/day6/TestAspectWithoutXml.java | 3 +-
.../src/test/java/day7/TestJDBCTemplate.java | 33 +++++
27 files changed, 524 insertions(+), 94 deletions(-)
create mode 100644 spring/src/main/java/dao/MyUserDao.java
create mode 100644 spring/src/main/java/dao/impl/MyUserDaoImpl.java
create mode 100644 spring/src/main/java/dao/impl/UserDaoImpl.java
create mode 100644 spring/src/main/java/interceptor/DisplayExecuteSqlInterceptor.java
create mode 100644 spring/src/main/java/mapper/UserMapper.java
create mode 100644 spring/src/main/resources/log4j2.xml
create mode 100644 spring/src/main/resources/resource.properties
create mode 100644 spring/src/test/java/day7/TestJDBCTemplate.java
diff --git a/spring/pom.xml b/spring/pom.xml
index baccea1..23f7101 100644
--- a/spring/pom.xml
+++ b/spring/pom.xml
@@ -43,5 +43,43 @@
RELEASE
compile
+
+
+ mysql
+ mysql-connector-java
+ 8.0.15
+
+
+
+
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.26
+
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.7.26
+ test
+
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.11.2
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.4
+
+
\ No newline at end of file
diff --git a/spring/spring.iml b/spring/spring.iml
index 878e79c..10015d6 100644
--- a/spring/spring.iml
+++ b/spring/spring.iml
@@ -2,12 +2,7 @@
-
-
- file://$MODULE_DIR$/src/main/resources/Beans.xml
- file://$MODULE_DIR$/src/main/java/common/BeanFactoryGenerator.java
-
-
+
@@ -35,6 +30,14 @@
+
+
+
+
+
+
+
+
diff --git a/spring/src/main/java/bean/Parent.java b/spring/src/main/java/bean/Parent.java
index 14389d9..5a531fe 100644
--- a/spring/src/main/java/bean/Parent.java
+++ b/spring/src/main/java/bean/Parent.java
@@ -27,7 +27,11 @@ public class Parent {
*/
private String word;
- public String getName() {
- return "这里是Parent:" + name;
+// public String getName() {
+// return "这里是Parent:" + name;
+// }
+
+ public void attemptToThrowException() throws Exception {
+ throw new Exception("手动触发异常");
}
}
diff --git a/spring/src/main/java/config/BootConfig.java b/spring/src/main/java/config/BootConfig.java
index fd72672..fe49dda 100644
--- a/spring/src/main/java/config/BootConfig.java
+++ b/spring/src/main/java/config/BootConfig.java
@@ -1,6 +1,6 @@
package config;
-import dao.UserDao;
+import dao.impl.UserDaoImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -13,7 +13,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class BootConfig {
@Bean
- public UserDao getUserDao(){
- return new UserDao();
+ public UserDaoImpl getUserDao(){
+ return new UserDaoImpl();
}
}
diff --git a/spring/src/main/java/config/BootOutOfConfig.java b/spring/src/main/java/config/BootOutOfConfig.java
index d992cee..d4e8e62 100644
--- a/spring/src/main/java/config/BootOutOfConfig.java
+++ b/spring/src/main/java/config/BootOutOfConfig.java
@@ -1,9 +1,7 @@
package config;
-import dao.UserDao;
+import dao.impl.UserDaoImpl;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import service.BookService;
import service.UserService;
/**
@@ -26,7 +24,7 @@ public class BootOutOfConfig {
return new UserService(getUserDao());
}
@Bean
- public UserDao getUserDao(){
- return new UserDao();
+ public UserDaoImpl getUserDao(){
+ return new UserDaoImpl();
}
}
diff --git a/spring/src/main/java/config/BootWithConfig.java b/spring/src/main/java/config/BootWithConfig.java
index 1bba2c9..08db08e 100644
--- a/spring/src/main/java/config/BootWithConfig.java
+++ b/spring/src/main/java/config/BootWithConfig.java
@@ -1,10 +1,9 @@
package config;
-import dao.UserDao;
+import dao.impl.UserDaoImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.Scope;
/**
* @Author: fancyears·milos·malvis
@@ -18,7 +17,7 @@ import org.springframework.context.annotation.Scope;
public class BootWithConfig {
@Bean(initMethod = "init" ,destroyMethod = "cleanup")
// @Scope("prototype")//非单例模式的bean不会执行destroyMethod定义的方法
- public UserDao getUserDaoFromConfig(){
- return new UserDao();
+ public UserDaoImpl getUserDaoFromConfig(){
+ return new UserDaoImpl();
}
}
diff --git a/spring/src/main/java/dao/MyUserDao.java b/spring/src/main/java/dao/MyUserDao.java
new file mode 100644
index 0000000..0a2569b
--- /dev/null
+++ b/spring/src/main/java/dao/MyUserDao.java
@@ -0,0 +1,23 @@
+package dao;
+
+import pojo.User;
+
+import java.util.List;
+
+/**
+ * @Author: fancyears·milos·malvis
+ * @Description:
+ * @Date: Created in 2019/4/29 16:53
+ * @Modified By:
+ */
+public interface MyUserDao {
+ int insert(User user);
+
+ int delete(Long id);
+
+ List listUser();
+
+ User selectUser(Long id);
+
+ int update(User user);
+}
diff --git a/spring/src/main/java/dao/UserDao.java b/spring/src/main/java/dao/UserDao.java
index 338a500..c86dc4a 100644
--- a/spring/src/main/java/dao/UserDao.java
+++ b/spring/src/main/java/dao/UserDao.java
@@ -1,38 +1,24 @@
package dao;
-import pojo.FastUser;
import pojo.User;
+import java.util.List;
+
/**
* @Author: fancyears·milos·malvis
* @Description:
- * @Date: Created in 2019/4/16 10:52
+ * @Date: Created in 2019/4/29 14:04
* @Modified By:
*/
-public class UserDao {
- /**
- * 模拟插入一个User对象
- *
- * @param user
- */
- public int insert(FastUser user) {
- System.out.println("模拟插入User,Username=" + user.getUsername());
- return 1;
- }
-
- public FastUser getUser(Long userId) {
- User user=new User();
- user.setNickname("Rosy");
- user.setId(userId);
- System.out.println("模拟查询User,Username=" + user.getNickname()+"\t ID="+user.getId());
- return user;
- }
-
- public void init(){
- System.out.println("这里是UserDao初始化'");
- }
- public void cleanup() {
- // destruction logic
- System.out.println("这里是UserDao cleanup'");
- }
+public interface UserDao {
+ int insert(User user);
+
+ int delete(Long id);
+
+ List listUser();
+
+ User selectUser(Long id);
+
+ int update(User user);
+
}
diff --git a/spring/src/main/java/dao/impl/MyUserDaoImpl.java b/spring/src/main/java/dao/impl/MyUserDaoImpl.java
new file mode 100644
index 0000000..5003784
--- /dev/null
+++ b/spring/src/main/java/dao/impl/MyUserDaoImpl.java
@@ -0,0 +1,59 @@
+package dao.impl;
+
+import dao.MyUserDao;
+import mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import pojo.FastUser;
+import pojo.User;
+
+import java.util.List;
+
+/**
+ * @Author: fancyears·milos·malvis
+ * @Description:
+ * @Date: Created in 2019/4/29 16:53
+ * @Modified By:
+ */
+public class MyUserDaoImpl implements MyUserDao {
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+
+ public MyUserDaoImpl() {
+ }
+ @Override
+ public int insert(User user) {
+ String sql = "insert USER(username,password) values(?,?)";
+ System.out.println(sql);
+ return jdbcTemplate.update(sql, user.getUsername(), user.getPassword());
+ }
+
+ @Override
+ public int delete(Long id) {
+ String sql = "delete USER t where t.id= ?";
+ System.out.println(sql);
+ return jdbcTemplate.update(sql, id);
+ }
+
+ @Override
+ public List listUser() {
+ String sql = "select * from USER";
+ System.out.println(sql);
+ List result = jdbcTemplate.query(sql, new UserMapper());
+ return result;
+ }
+
+ @Override
+ public User selectUser(Long id) {
+ String sql = "select * from USER where id = ?";
+ System.out.println(sql);
+ return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserMapper());
+ }
+
+ @Override
+ public int update(User user) {
+ String sql = "update USER t set t.username=? where id = ?";
+ System.out.println(sql);
+ return jdbcTemplate.update(sql, user.getUsername(), user.getId());
+ }
+}
diff --git a/spring/src/main/java/dao/impl/UserDaoImpl.java b/spring/src/main/java/dao/impl/UserDaoImpl.java
new file mode 100644
index 0000000..391048f
--- /dev/null
+++ b/spring/src/main/java/dao/impl/UserDaoImpl.java
@@ -0,0 +1,87 @@
+package dao.impl;
+
+import dao.UserDao;
+import mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import pojo.FastUser;
+import pojo.User;
+
+import java.util.List;
+
+/**
+ * @Author: fancyears·milos·malvis
+ * @Description:
+ * @Date: Created in 2019/4/16 10:52
+ * @Modified By:
+ */
+public class UserDaoImpl implements UserDao {
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+
+ public UserDaoImpl() {
+ }
+
+ /**
+ * 模拟插入一个User对象
+ *
+ * @param user
+ */
+ public int insert(FastUser user) {
+ System.out.println("模拟插入User,Username=" + user.getUsername());
+ return 1;
+ }
+
+ public FastUser getUser(Long userId) {
+ User user = new User();
+ user.setNickname("Rosy");
+ user.setId(userId);
+ System.out.println("模拟查询User,Username=" + user.getNickname() + "\t ID=" + user.getId());
+ return user;
+ }
+
+ public void init() {
+ System.out.println("这里是UserDao初始化'");
+ }
+
+ public void cleanup() {
+ // destruction logic
+ System.out.println("这里是UserDao cleanup'");
+ }
+
+ @Override
+ public int insert(User user) {
+ String sql = "insert USER(username,password) values(?,?)";
+ System.out.println(sql);
+ return jdbcTemplate.update(sql, user.getUsername(), user.getPassword());
+ }
+
+ @Override
+ public int delete(Long id) {
+ String sql = "delete USER t where t.id= ?";
+ System.out.println(sql);
+ return jdbcTemplate.update(sql, id);
+ }
+
+ @Override
+ public List listUser() {
+ String sql = "select * from USER";
+ System.out.println(sql);
+ List result = jdbcTemplate.query(sql, new UserMapper());
+ return result;
+ }
+
+ @Override
+ public User selectUser(Long id) {
+ String sql = "select * from USER where id = ?";
+ System.out.println(sql);
+ return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserMapper());
+ }
+
+ @Override
+ public int update(User user) {
+ String sql = "update USER t set t.username=? where id = ?";
+ System.out.println(sql);
+ return jdbcTemplate.update(sql, user.getUsername(), user.getId());
+ }
+}
diff --git a/spring/src/main/java/interceptor/DisplayExecuteSqlInterceptor.java b/spring/src/main/java/interceptor/DisplayExecuteSqlInterceptor.java
new file mode 100644
index 0000000..259b5fe
--- /dev/null
+++ b/spring/src/main/java/interceptor/DisplayExecuteSqlInterceptor.java
@@ -0,0 +1,135 @@
+package interceptor;
+
+
+import org.aopalliance.intercept.MethodInterceptor;
+import org.aopalliance.intercept.MethodInvocation;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.lang.reflect.Method;
+
+/**
+ * @Author: fancyears·milos·malvis
+ * @Description: 方法拦截 粒度在方法上,调试管理 利用 AOP 原理, 在开发模式下于控制台展示 dao层 的实际执行的SQL
+ * @Date: Created in 2019/4/29 17:00
+ * @Modified By:
+ */
+public class DisplayExecuteSqlInterceptor implements MethodInterceptor {
+ private static final Logger log = LoggerFactory.getLogger(DisplayExecuteSqlInterceptor.class);
+
+ private static final String CONTROLLER ="CONTROLLER";
+ private static final String SERVICE ="SERVICE";
+ private static final String DAO ="DAO";
+ private static final String IMPL ="IMPL";
+
+ @Value("true")
+ String codeModel;
+ String flag="true";
+ @Override
+ public Object invoke(MethodInvocation mi) throws Throwable {
+
+
+ if(StringUtils.equals(flag,codeModel)){
+ //获取该方法的传参
+ Object[] ars = mi.getArguments();
+
+ //通过反射机制 获取到该方法 (Method 包含 作用域 返回类型 方法名 参数类型)
+ Method method= mi.getMethod();
+
+ //获取代理的对象 (也就是这个方法所在内存中的对象)
+ Object obj = mi.getThis();
+
+ Object [] params =new Object[]{} ;
+ String sql ="";
+ for(Object o :ars){
+ if(o instanceof Object[]){
+ params= (Object[]) o;
+ }else if(o instanceof String){
+ sql=(String) o;
+ }
+ }
+
+ Thread current = Thread.currentThread();
+ StackTraceElement[] elements =current.getStackTrace();
+
+ //倒序输出 栈帧 信息 ,过滤出 项目的代码 这里只过滤出(Controller / service impl / dao impl)层的代码,如需要其他的可自行遍历
+ if(elements !=null && elements.length>0){
+ //获得项目名
+ String packageName =DisplayExecuteSqlInterceptor.class.getPackage().getName();
+ packageName=StringUtils.substringBefore(packageName,".");
+ StringBuilder sb =new StringBuilder();
+ sb.append(" -------->本次执行SQL的代码在<--------- ");
+ sb.append('\n');
+ for(int i=elements.length ;i>0 ;i--){
+ StackTraceElement e =elements[i-1];
+ if(StringUtils.contains(e.getClassName(),packageName)){
+ String cn=StringUtils.upperCase(e.getClassName());
+ if(StringUtils.contains(cn,CONTROLLER)){
+ sb.append( CONTROLLER+" 层 ->类名:"+e.getClassName()+",方法名:"+e.getMethodName()+",代码行数:"+e.getLineNumber()+"");
+ sb.append('\n');
+ }else if(StringUtils.contains(cn,SERVICE) &&StringUtils.contains(cn,IMPL) && e.getLineNumber()>0) {
+ sb.append( SERVICE+" 层 ->类名:"+e.getClassName()+",方法名:"+e.getMethodName()+",代码行数:"+e.getLineNumber()+"");
+ sb.append('\n');
+ }else if(StringUtils.contains(cn,DAO) &&StringUtils.contains(cn,IMPL) && e.getLineNumber()>0 ){
+ sb.append(DAO +" 层->类名:"+e.getClassName()+",方法名:"+e.getMethodName()+",代码行数:"+e.getLineNumber()+"");
+ sb.append('\n');
+ }
+ }
+ }
+ System.out.println(sb);
+ log.info(sb.toString());
+ }
+ getExecuteSql(sql,params);
+ }
+ //执行被拦截的方法,切记,如果此方法不调用,则被拦截的方法不会被执行。
+ return mi.proceed();
+ }
+
+ private String getExecuteSql(String sql, Object[] params) {
+ if (StringUtils.isNotBlank(sql)) {
+ if (params != null && params.length > 0) {
+ int a = getCount(sql, '?');
+ int b = params.length;
+ if (a == b) {
+ sql = StringUtils.replace(sql, "?", "XXXX");
+ for (int i = 0; i < params.length; i++) {
+ Object obj = params[i];
+ if (StringUtils.isNotBlank(String.valueOf(obj)) && StringUtils.isNumeric(String.valueOf(obj))) {
+ obj = Integer.valueOf(String.valueOf(obj));
+ } else {
+ obj = "'" + obj + "'";
+ }
+ sql = sql.replaceFirst("XXXX", String.valueOf(obj));
+ }
+ } else {
+ log.info("参数个数传的不正确, sql中 需要 :{} 个参数,实际传入参数为 :{} 个。", a, b);
+ return null;
+ }
+ }
+ }
+
+ StringBuilder sb =new StringBuilder();
+ sb.append(" ----------->本次执行sql为:<----------- ");
+ sb.append('\n');
+ sb.append(sql+'\n');
+
+ log.info(sb.toString());
+ return sql;
+
+ }
+
+ private int getCount(String sql ,char a ){
+ int count=0;
+ if(null!=sql){
+ for (int i = 0; i < sql.length(); i++) {
+ if(sql.charAt(i)==a){
+ count++;
+ }
+ }
+ }
+ return count;
+ }
+
+}
diff --git a/spring/src/main/java/log/LoggerWithoutXml.java b/spring/src/main/java/log/LoggerWithoutXml.java
index a59ad2d..d137022 100644
--- a/spring/src/main/java/log/LoggerWithoutXml.java
+++ b/spring/src/main/java/log/LoggerWithoutXml.java
@@ -14,16 +14,18 @@ public class LoggerWithoutXml {
/** Following is the definition for a pointcut to select
* all the methods available. So advice will be called
* for all the methods.
+ *
+ * 这个定义的切入点
*/
@Pointcut("execution(* bean.Parent.*(..))")
- private void selectAll(){
+ private void pointCutDefine(){
System.out.println("执行selectAll");
}
/**
* This is the method which I would like to execute
* before a selected method execution.
*/
- @Before("selectAll()")
+ @Before("pointCutDefine()")
public void beforeAdvice(){
System.out.println("切点前操作");
}
@@ -31,7 +33,7 @@ public class LoggerWithoutXml {
* This is the method which I would like to execute
* after a selected method execution.
*/
- @After("selectAll()")
+ @After("pointCutDefine()")
public void afterAdvice(){
System.out.println("切点后操作");
}
@@ -39,7 +41,7 @@ public class LoggerWithoutXml {
* This is the method which I would like to execute
* when any method returns.
*/
- @AfterReturning(pointcut = "selectAll()", returning="retVal")
+ @AfterReturning(pointcut = "pointCutDefine()", returning="retVal")
public void afterReturningAdvice(Object retVal){
System.out.println("返回值:" + retVal.toString() );
}
@@ -47,7 +49,7 @@ public class LoggerWithoutXml {
* This is the method which I would like to execute
* if there is an exception raised by any method.
*/
- @AfterThrowing(pointcut = "selectAll()", throwing = "ex")
+ @AfterThrowing(pointcut = "pointCutDefine()", throwing = "ex")
public void AfterThrowingAdvice(IllegalArgumentException ex){
System.out.println("发生异常: " + ex.toString());
}
diff --git a/spring/src/main/java/mapper/UserMapper.java b/spring/src/main/java/mapper/UserMapper.java
new file mode 100644
index 0000000..3af164e
--- /dev/null
+++ b/spring/src/main/java/mapper/UserMapper.java
@@ -0,0 +1,23 @@
+package mapper;
+
+import org.springframework.jdbc.core.RowMapper;
+import pojo.User;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * @Author: fancyears·milos·malvis
+ * @Description:
+ * @Date: Created in 2019/4/29 14:08
+ * @Modified By:
+ */
+public class UserMapper implements RowMapper {
+ @Override
+ public User mapRow(ResultSet resultSet, int i) throws SQLException {
+ User user=new User();
+ user.setId(resultSet.getLong("id"));
+ user.setUsername(resultSet.getString("username"));
+ return user;
+ }
+}
diff --git a/spring/src/main/java/service/BookService.java b/spring/src/main/java/service/BookService.java
index 512385c..83c6375 100644
--- a/spring/src/main/java/service/BookService.java
+++ b/spring/src/main/java/service/BookService.java
@@ -1,6 +1,6 @@
package service;
-import dao.UserDao;
+import dao.impl.UserDaoImpl;
import lombok.Setter;
import pojo.FastUser;
import pojo.User;
@@ -13,7 +13,7 @@ import pojo.User;
*/
public class BookService {
@Setter
- private UserDao userDao;
+ private UserDaoImpl userDaoImpl;
@Setter
private User user;
@@ -23,7 +23,7 @@ public class BookService {
public void doGetBookUser(Long userId){
System.out.println(user.getId());
- FastUser fastUser=userDao.getUser(userId);
+ FastUser fastUser= userDaoImpl.getUser(userId);
// user.setId(userId);
}
}
diff --git a/spring/src/main/java/service/EntityService.java b/spring/src/main/java/service/EntityService.java
index 79552f2..54b078b 100644
--- a/spring/src/main/java/service/EntityService.java
+++ b/spring/src/main/java/service/EntityService.java
@@ -1,6 +1,6 @@
package service;
-import dao.UserDao;
+import dao.impl.UserDaoImpl;
import lombok.Data;
import pojo.FastUser;
@@ -18,14 +18,14 @@ import javax.annotation.Resource;
public class EntityService {
private String name;
- @Resource/*(type = UserDao.class)*/
+ @Resource/*(type = UserDaoImpl.class)*/
// 1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
// 2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。如果name属性一旦指定,就只会按照名称进行装配。
// 3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
// 4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
// @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
- private UserDao userDao;
+ private UserDaoImpl userDaoImpl;
public EntityService() {
}
@@ -41,6 +41,6 @@ public class EntityService {
}
public FastUser getUser(Long id) {
- return userDao.getUser(id);
+ return userDaoImpl.getUser(id);
}
}
diff --git a/spring/src/main/java/service/SimplePlayerService.java b/spring/src/main/java/service/SimplePlayerService.java
index 8f7edc3..9a067ef 100644
--- a/spring/src/main/java/service/SimplePlayerService.java
+++ b/spring/src/main/java/service/SimplePlayerService.java
@@ -1,6 +1,6 @@
package service;
-import dao.UserDao;
+import dao.impl.UserDaoImpl;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,19 +22,19 @@ public class SimplePlayerService {
@Autowired(required = false)
SimplePlayer player;
- private UserDao userDao;
+ private UserDaoImpl userDaoImpl;
@Getter
@Setter
private String serviceName;
@Autowired
- public SimplePlayerService(UserDao userDao) {
- this.userDao = userDao;
+ public SimplePlayerService(UserDaoImpl userDaoImpl) {
+ this.userDaoImpl = userDaoImpl;
}
public FastUser getPlayerByUser(Long id) {
- return userDao.getUser(id);
+ return userDaoImpl.getUser(id);
}
public void showUser() {
diff --git a/spring/src/main/java/service/UserDetector.java b/spring/src/main/java/service/UserDetector.java
index 53bb664..2ebcd4b 100644
--- a/spring/src/main/java/service/UserDetector.java
+++ b/spring/src/main/java/service/UserDetector.java
@@ -1,6 +1,5 @@
package service;
-import dao.UserDao;
import lombok.Getter;
import lombok.Setter;
import pojo.User;
diff --git a/spring/src/main/java/service/UserRelease.java b/spring/src/main/java/service/UserRelease.java
index 910fc76..4e8eeb5 100644
--- a/spring/src/main/java/service/UserRelease.java
+++ b/spring/src/main/java/service/UserRelease.java
@@ -1,6 +1,6 @@
package service;
-import dao.UserDao;
+import dao.impl.UserDaoImpl;
import pojo.User;
/**
@@ -10,16 +10,16 @@ import pojo.User;
* @Modified By:
*/
public class UserRelease {
- private UserDao userDao;
+ private UserDaoImpl userDaoImpl;
private String desc;
- public UserRelease(UserDao userDao, String desc) {
- this.userDao = userDao;
+ public UserRelease(UserDaoImpl userDaoImpl, String desc) {
+ this.userDaoImpl = userDaoImpl;
this.desc = desc;
}
public User releaseUser(Long id) {
- User user = (User) userDao.getUser(id);
+ User user = (User) userDaoImpl.getUser(id);
user.setId(id);
return user;
}
diff --git a/spring/src/main/java/service/UserService.java b/spring/src/main/java/service/UserService.java
index 8682913..df8cf30 100644
--- a/spring/src/main/java/service/UserService.java
+++ b/spring/src/main/java/service/UserService.java
@@ -1,6 +1,6 @@
package service;
-import dao.UserDao;
+import dao.impl.UserDaoImpl;
import lombok.Getter;
import lombok.Setter;
import pojo.FastUser;
@@ -15,7 +15,7 @@ public class UserService {
@Setter
@Getter
- private UserDao userDao;
+ private UserDaoImpl userDaoImpl;
@Getter
private String daoClassConname;
private Integer index;
@@ -23,8 +23,8 @@ public class UserService {
public UserService() {
}
- public UserService(UserDao userDao) {
- this.userDao = userDao;
+ public UserService(UserDaoImpl userDaoImpl) {
+ this.userDaoImpl = userDaoImpl;
}
public UserService(String daoClassConname, Integer index) {
@@ -32,6 +32,6 @@ public class UserService {
this.index = index;
}
public boolean insert(FastUser user) {
- return userDao.insert(user) > 0 ? true : false;
+ return userDaoImpl.insert(user) > 0 ? true : false;
}
}
diff --git a/spring/src/main/resources/Beans.xml b/spring/src/main/resources/Beans.xml
index c9d968c..baaac6f 100644
--- a/spring/src/main/resources/Beans.xml
+++ b/spring/src/main/resources/Beans.xml
@@ -8,13 +8,15 @@
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
default-init-method="afterInitialization"
>
+
-
+
+
@@ -25,10 +27,20 @@
throwing="ex"
method="AfterThrowingAdvice"/>
+
+
+
+
+
+
+
+
+
-
+
+
@@ -82,30 +94,30 @@
-
+
-
+
-
+
-
+
-
+
-
-
+
+
@@ -185,5 +197,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring/src/main/resources/log4j2.xml b/spring/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..89d4b2e
--- /dev/null
+++ b/spring/src/main/resources/log4j2.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring/src/main/resources/resource.properties b/spring/src/main/resources/resource.properties
new file mode 100644
index 0000000..cd44325
--- /dev/null
+++ b/spring/src/main/resources/resource.properties
@@ -0,0 +1 @@
+codeModel=true
\ No newline at end of file
diff --git a/spring/src/test/java/day4/TestAnnontionWithoutXml.java b/spring/src/test/java/day4/TestAnnontionWithoutXml.java
index cbe36e7..d03c3f5 100644
--- a/spring/src/test/java/day4/TestAnnontionWithoutXml.java
+++ b/spring/src/test/java/day4/TestAnnontionWithoutXml.java
@@ -1,10 +1,8 @@
package day4;
-import common.BeanFactoryGenerator;
import config.BootConfig;
import config.BootOutOfConfig;
-import dao.UserDao;
-import org.springframework.context.ApplicationContext;
+import dao.impl.UserDaoImpl;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import pojo.FastUser;
@@ -25,8 +23,8 @@ public class TestAnnontionWithoutXml {
context.register(BootOutOfConfig.class);//这里注册一个bean,但是这个bean并没有被@Configuration进行修饰
(context).refresh();
BootConfig bootConfig=context.getBean(BootConfig.class);
- UserDao userDao=bootConfig.getUserDao();
- userDao.getUser(56789L);
+ UserDaoImpl userDaoImpl =bootConfig.getUserDao();
+ userDaoImpl.getUser(56789L);
System.out.println("----------------------");
BootOutOfConfig bootOutOfConfig=context.getBean(BootOutOfConfig.class);
bootOutOfConfig.getUserService().insert(new FastUser());
diff --git a/spring/src/test/java/day4/TestImport.java b/spring/src/test/java/day4/TestImport.java
index ba57ce4..0d9d315 100644
--- a/spring/src/test/java/day4/TestImport.java
+++ b/spring/src/test/java/day4/TestImport.java
@@ -1,9 +1,7 @@
package day4;
-import config.BootConfig;
import config.BootOutOfConfig;
import config.BootWithConfig;
-import dao.UserDao;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import pojo.FastUser;
diff --git a/spring/src/test/java/day4/TestJSR250.java b/spring/src/test/java/day4/TestJSR250.java
index 5e9215d..8e97c30 100644
--- a/spring/src/test/java/day4/TestJSR250.java
+++ b/spring/src/test/java/day4/TestJSR250.java
@@ -22,7 +22,7 @@ public class TestJSR250 {
EntityService entityService= (EntityService) context.getBean("entityService");
System.out.println(entityService.getName());
entityService.getUser(776L);
- entityService.getUserDao();
+ entityService.getUserDaoImpl();
context.close();
}
}
diff --git a/spring/src/test/java/day6/TestAspectWithoutXml.java b/spring/src/test/java/day6/TestAspectWithoutXml.java
index a98fb13..1fb8c79 100644
--- a/spring/src/test/java/day6/TestAspectWithoutXml.java
+++ b/spring/src/test/java/day6/TestAspectWithoutXml.java
@@ -12,9 +12,10 @@ import org.springframework.context.ApplicationContext;
* @Modified By:
*/
public class TestAspectWithoutXml {
- public static void main(String[] args) {
+ public static void main(String[] args) throws Exception {
ApplicationContext context=BeanFactoryGenerator.context;
Parent parent=context.getBean(Parent.class);
System.out.println(parent.getName());
+ parent.attemptToThrowException();
}
}
diff --git a/spring/src/test/java/day7/TestJDBCTemplate.java b/spring/src/test/java/day7/TestJDBCTemplate.java
new file mode 100644
index 0000000..653feb0
--- /dev/null
+++ b/spring/src/test/java/day7/TestJDBCTemplate.java
@@ -0,0 +1,33 @@
+package day7;
+
+import common.BeanFactoryGenerator;
+import dao.MyUserDao;
+import dao.UserDao;
+import dao.impl.MyUserDaoImpl;
+import dao.impl.UserDaoImpl;
+import org.springframework.context.ApplicationContext;
+import pojo.User;
+
+import java.util.List;
+
+/**
+ * @Author: fancyears·milos·malvis
+ * @Description:
+ * @Date: Created in 2019/4/29 14:31
+ * @Modified By:
+ */
+public class TestJDBCTemplate {
+ public static void main(String[] args) {
+ ApplicationContext context=BeanFactoryGenerator.context;
+ MyUserDao userDao=context.getBean(MyUserDao.class);
+ User user=new User();
+ user.setUsername("a125d");
+ user.setPassword("KKLAION_+qweasdjk*123kj");
+ int id=userDao.insert(user);
+ User userFromDB=userDao.selectUser((long) id);
+ System.out.println(userFromDB);
+
+ List users=userDao.listUser();
+ System.out.println();
+ }
+}
--
Gitee
From 7c4e9f597adc1fd01e08cb29ccfbd1adacebde42 Mon Sep 17 00:00:00 2001
From: fancyears <1243093769@qq.com>
Date: Tue, 30 Apr 2019 10:57:15 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=AE=8C=E6=95=B4log4j?=
=?UTF-8?q?=E6=97=A5=E5=BF=97=E7=8E=AF=E5=A2=83=EF=BC=8C=E5=85=B7=E4=BD=93?=
=?UTF-8?q?=E6=97=A5=E5=BF=97=E6=96=87=E4=BB=B6=E9=9C=80=E8=A6=81=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9log4j2.xml=E7=9A=84trans=5Flog=5Fpath?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
spring/pom.xml | 50 +++--
.../DisplayExecuteSqlInterceptor.java | 82 ++++----
spring/src/main/resources/Beans.xml | 2 +
spring/src/main/resources/log4j2.xml | 176 ++++++++++++++++--
spring/src/main/resources/resource.properties | 3 +-
5 files changed, 243 insertions(+), 70 deletions(-)
diff --git a/spring/pom.xml b/spring/pom.xml
index 23f7101..98c1344 100644
--- a/spring/pom.xml
+++ b/spring/pom.xml
@@ -49,24 +49,12 @@
mysql-connector-java
8.0.15
-
-
-
-
-
-
-
+
+
- org.slf4j
- slf4j-api
- 1.7.26
-
-
-
- org.slf4j
- slf4j-log4j12
- 1.7.26
- test
+ org.apache.logging.log4j
+ log4j-api
+ 2.11.2
@@ -74,12 +62,38 @@
log4j-core
2.11.2
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ 2.11.2
+
+
+
+ org.apache.logging.log4j
+ log4j-jcl
+ 2.11.2
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.26
+
+
+
org.apache.commons
commons-lang3
3.4
-
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.1.0
+ provided
+
\ No newline at end of file
diff --git a/spring/src/main/java/interceptor/DisplayExecuteSqlInterceptor.java b/spring/src/main/java/interceptor/DisplayExecuteSqlInterceptor.java
index 259b5fe..26e8833 100644
--- a/spring/src/main/java/interceptor/DisplayExecuteSqlInterceptor.java
+++ b/spring/src/main/java/interceptor/DisplayExecuteSqlInterceptor.java
@@ -7,81 +7,83 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
import java.lang.reflect.Method;
/**
* @Author: fancyears·milos·malvis
- * @Description: 方法拦截 粒度在方法上,调试管理 利用 AOP 原理, 在开发模式下于控制台展示 dao层 的实际执行的SQL
+ * @Description: 方法拦截 粒度在方法上,调试管理 利用 AOP 原理, 在开发模式下于控制台展示 dao层 的实际执行的SQL
* @Date: Created in 2019/4/29 17:00
* @Modified By:
*/
+@Configuration
public class DisplayExecuteSqlInterceptor implements MethodInterceptor {
private static final Logger log = LoggerFactory.getLogger(DisplayExecuteSqlInterceptor.class);
- private static final String CONTROLLER ="CONTROLLER";
- private static final String SERVICE ="SERVICE";
- private static final String DAO ="DAO";
- private static final String IMPL ="IMPL";
+ private static final String CONTROLLER = "CONTROLLER";
+ private static final String SERVICE = "SERVICE";
+ private static final String DAO = "DAO";
+ private static final String IMPL = "IMPL";
+
+ @Value("${debugModel}")
+ Boolean debugModel;
- @Value("true")
- String codeModel;
- String flag="true";
@Override
public Object invoke(MethodInvocation mi) throws Throwable {
- if(StringUtils.equals(flag,codeModel)){
+ if (debugModel) {
//获取该方法的传参
Object[] ars = mi.getArguments();
//通过反射机制 获取到该方法 (Method 包含 作用域 返回类型 方法名 参数类型)
- Method method= mi.getMethod();
+ Method method = mi.getMethod();
//获取代理的对象 (也就是这个方法所在内存中的对象)
Object obj = mi.getThis();
- Object [] params =new Object[]{} ;
- String sql ="";
- for(Object o :ars){
- if(o instanceof Object[]){
- params= (Object[]) o;
- }else if(o instanceof String){
- sql=(String) o;
+ Object[] params = new Object[]{};
+ String sql = "";
+ for (Object o : ars) {
+ if (o instanceof Object[]) {
+ params = (Object[]) o;
+ } else if (o instanceof String) {
+ sql = (String) o;
}
}
Thread current = Thread.currentThread();
- StackTraceElement[] elements =current.getStackTrace();
+ StackTraceElement[] elements = current.getStackTrace();
//倒序输出 栈帧 信息 ,过滤出 项目的代码 这里只过滤出(Controller / service impl / dao impl)层的代码,如需要其他的可自行遍历
- if(elements !=null && elements.length>0){
+ if (elements != null && elements.length > 0) {
//获得项目名
- String packageName =DisplayExecuteSqlInterceptor.class.getPackage().getName();
- packageName=StringUtils.substringBefore(packageName,".");
- StringBuilder sb =new StringBuilder();
+ String packageName = DisplayExecuteSqlInterceptor.class.getPackage().getName();
+ packageName = StringUtils.substringBefore(packageName, ".");
+ StringBuilder sb = new StringBuilder();
sb.append(" -------->本次执行SQL的代码在<--------- ");
sb.append('\n');
- for(int i=elements.length ;i>0 ;i--){
- StackTraceElement e =elements[i-1];
- if(StringUtils.contains(e.getClassName(),packageName)){
- String cn=StringUtils.upperCase(e.getClassName());
- if(StringUtils.contains(cn,CONTROLLER)){
- sb.append( CONTROLLER+" 层 ->类名:"+e.getClassName()+",方法名:"+e.getMethodName()+",代码行数:"+e.getLineNumber()+"");
+ for (int i = elements.length; i > 0; i--) {
+ StackTraceElement e = elements[i - 1];
+ if (StringUtils.contains(e.getClassName(), packageName)) {
+ String cn = StringUtils.upperCase(e.getClassName());
+ if (StringUtils.contains(cn, CONTROLLER)) {
+ sb.append(CONTROLLER + " 层 ->类名:" + e.getClassName() + ",方法名:" + e.getMethodName() + ",代码行数:" + e.getLineNumber() + "");
sb.append('\n');
- }else if(StringUtils.contains(cn,SERVICE) &&StringUtils.contains(cn,IMPL) && e.getLineNumber()>0) {
- sb.append( SERVICE+" 层 ->类名:"+e.getClassName()+",方法名:"+e.getMethodName()+",代码行数:"+e.getLineNumber()+"");
+ } else if (StringUtils.contains(cn, SERVICE) && StringUtils.contains(cn, IMPL) && e.getLineNumber() > 0) {
+ sb.append(SERVICE + " 层 ->类名:" + e.getClassName() + ",方法名:" + e.getMethodName() + ",代码行数:" + e.getLineNumber() + "");
sb.append('\n');
- }else if(StringUtils.contains(cn,DAO) &&StringUtils.contains(cn,IMPL) && e.getLineNumber()>0 ){
- sb.append(DAO +" 层->类名:"+e.getClassName()+",方法名:"+e.getMethodName()+",代码行数:"+e.getLineNumber()+"");
+ } else if (StringUtils.contains(cn, DAO) && StringUtils.contains(cn, IMPL) && e.getLineNumber() > 0) {
+ sb.append(DAO + " 层->类名:" + e.getClassName() + ",方法名:" + e.getMethodName() + ",代码行数:" + e.getLineNumber() + "");
sb.append('\n');
}
}
}
- System.out.println(sb);
log.info(sb.toString());
}
- getExecuteSql(sql,params);
+ getExecuteSql(sql, params);
}
//执行被拦截的方法,切记,如果此方法不调用,则被拦截的方法不会被执行。
return mi.proceed();
@@ -110,21 +112,21 @@ public class DisplayExecuteSqlInterceptor implements MethodInterceptor {
}
}
- StringBuilder sb =new StringBuilder();
+ StringBuilder sb = new StringBuilder();
sb.append(" ----------->本次执行sql为:<----------- ");
sb.append('\n');
- sb.append(sql+'\n');
+ sb.append(sql + '\n');
log.info(sb.toString());
return sql;
}
- private int getCount(String sql ,char a ){
- int count=0;
- if(null!=sql){
+ private int getCount(String sql, char a) {
+ int count = 0;
+ if (null != sql) {
for (int i = 0; i < sql.length(); i++) {
- if(sql.charAt(i)==a){
+ if (sql.charAt(i) == a) {
count++;
}
}
diff --git a/spring/src/main/resources/Beans.xml b/spring/src/main/resources/Beans.xml
index baaac6f..7cec96a 100644
--- a/spring/src/main/resources/Beans.xml
+++ b/spring/src/main/resources/Beans.xml
@@ -8,6 +8,8 @@
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
default-init-method="afterInitialization"
>
+
+
diff --git a/spring/src/main/resources/log4j2.xml b/spring/src/main/resources/log4j2.xml
index 89d4b2e..dc35cfb 100644
--- a/spring/src/main/resources/log4j2.xml
+++ b/spring/src/main/resources/log4j2.xml
@@ -1,18 +1,172 @@
-
+
+
+
+
+
+
+
+
+
+
+ ${sys:catalina.home}/logs/
+ info
+ server_
+
+
+
+
-
-
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+ ${log_pattern}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${log_pattern}
+
+
+
+
+
+
+
+
+
+
+
+
+ ${log_pattern}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${log_pattern}
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
\ No newline at end of file
diff --git a/spring/src/main/resources/resource.properties b/spring/src/main/resources/resource.properties
index cd44325..bb336b5 100644
--- a/spring/src/main/resources/resource.properties
+++ b/spring/src/main/resources/resource.properties
@@ -1 +1,2 @@
-codeModel=true
\ No newline at end of file
+#ģʽ
+debugModel=true
\ No newline at end of file
--
Gitee