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(); + } +}