diff --git a/spring/pom.xml b/spring/pom.xml
index baccea188a344615f004073b5e5c52f7b53d4cdf..98c134494bcd742ad0fb07ae56ada0fedabdee17 100644
--- a/spring/pom.xml
+++ b/spring/pom.xml
@@ -43,5 +43,57 @@
RELEASE
compile
+
+
+ mysql
+ mysql-connector-java
+ 8.0.15
+
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.11.2
+
+
+
+ org.apache.logging.log4j
+ 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/spring.iml b/spring/spring.iml
index 878e79caa3340554f02132637231ba5909fae915..10015d6bcbb26922a99759a159ebc0fc62ae00e0 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 14389d9058beeead97aeb3af2e1b3ae3042eabe3..5a531feddebd0448c58580cbb9a00b1e9f9b8666 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 fd7267267b7766bfbb8dfc50bfaa12f78811a8a9..fe49dda488dd02d5d5a79f7e21fa0c6ab5656b42 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 d992ceeb5d814e5743524db0d5eaf256838e6bde..d4e8e6229d0fcbe1d3752518671ffdf2a29f2456 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 1bba2c952271b5c898253e39c536953e48e98597..08db08e9752e6d74a8b118e038e236072dd12824 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 0000000000000000000000000000000000000000..0a2569b372b7f60a4e829e3d0fddaff745465946
--- /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 338a500444230a8fda3577db8a762cedf8ee29f6..c86dc4a6eb08c7a8e447f2531c8ca9b52dccb3b8 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 0000000000000000000000000000000000000000..5003784d718189dee553acdc9edc8b820de7a0b5
--- /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 0000000000000000000000000000000000000000..391048fcd822dbcef3496e17ba914e22848467d5
--- /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 0000000000000000000000000000000000000000..26e88336d3282b7986a1980fc252fe173e99d56c
--- /dev/null
+++ b/spring/src/main/java/interceptor/DisplayExecuteSqlInterceptor.java
@@ -0,0 +1,137 @@
+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 org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+import java.lang.reflect.Method;
+
+/**
+ * @Author: fancyears·milos·malvis
+ * @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";
+
+ @Value("${debugModel}")
+ Boolean debugModel;
+
+ @Override
+ public Object invoke(MethodInvocation mi) throws Throwable {
+
+
+ if (debugModel) {
+ //获取该方法的传参
+ 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');
+ }
+ }
+ }
+ 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 a59ad2dfb450f94c1988dab4f1622b7d46212011..d1370223ccc74c5e02514752c3807fa0430b957a 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 0000000000000000000000000000000000000000..3af164e7cb5e615bfbefc6c53b4cad8966cf3178
--- /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 512385c89b585b8e22d01d193142c7ec3c9e2ee4..83c637566c81169d10611fe0660e148a91d26bb9 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 79552f285349e5406d84a14ca86b2963e8c38755..54b078bbc2a8c820d0a9a57dd1db00f73b7387e2 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 8f7edc3a7dd95e7905b1a5c8fb5c312a0fa72e2f..9a067ef85b56f283c68933c5e6b8f36ed5174b4e 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 53bb664ebb570aefefa6d57ccf8b220261054706..2ebcd4b2a3a5e4f3d7e3fdbc6f576cff59f5ec63 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 910fc76269426573c2fa6fb55577dd73e64f8c3b..4e8eeb5ac3f496db7f95b9cd46bc59cae84e3b2c 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 8682913be54cf78e8dc6da0e5ca9618d47551050..df8cf3025fc5c7e1a720992e78d12c8ac8ec4def 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 c9d968cc9eecd6a4ee88cfb5651114c9413f5216..7cec96aab3fe6a87243178a582558263198fa0c3 100644
--- a/spring/src/main/resources/Beans.xml
+++ b/spring/src/main/resources/Beans.xml
@@ -8,13 +8,17 @@
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 +29,20 @@
throwing="ex"
method="AfterThrowingAdvice"/>
+
+
+
+
+
+
+
+
+
-
+
+
@@ -82,30 +96,30 @@
-
+
-
+
-
+
-
+
-
+
-
-
+
+
@@ -185,5 +199,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring/src/main/resources/log4j2.xml b/spring/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dc35cfb9976acf5a63405142396a7d3b22082705
--- /dev/null
+++ b/spring/src/main/resources/log4j2.xml
@@ -0,0 +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
new file mode 100644
index 0000000000000000000000000000000000000000..bb336b581038ab30ddf192d29ac65e9de7516ebc
--- /dev/null
+++ b/spring/src/main/resources/resource.properties
@@ -0,0 +1,2 @@
+#ģʽ
+debugModel=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 cbe36e75ec5d14f825bdd3a1d0d1a5f3800f7461..d03c3f53b3fa46447659d16165cc4bbc3dbd64ce 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 ba57ce452e304935ce096a080fb4eb70579e18fc..0d9d315dc2023f5d04fdd5ddcab6609cc70bb01c 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 5e9215d681165593d8aa1361f2f388fbcaa932c3..8e97c301607382bd00965513167ba22af2f662d2 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 a98fb133cbf257f66c1de61274f5a2d783555786..1fb8c7908314cddf0d412531bcf4a3ba968bc932 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 0000000000000000000000000000000000000000..653feb02f56729b2f4dc69cdb1d941fd84efac7d
--- /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();
+ }
+}