123456789101112131415161718192021222324252627282930313233343536373839
spring 有4个核心容器的jar 包 分别是Beans、Core、Context、SpEL这里我们只要引入spring-context依赖就足够了。
添加log4j.properties文件放置到src/reources下。
log4j.rootLogger=INFO,A1
log4j.logger.org.apache=INFO
log4j.appender.A1.Target=System.err
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apach 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 e.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
1234567
ps:这里的日志等级可以改为debug的级别,这里为了简便设置为info的级别,有需要可以自行更改。
接下来就是写下的伪登录业务;
快速写下dao层和service层业务
package com.spring.quickTest;
public interface userDao {
public void queryUser();
}
12345678
package com.spring.quickTest;
public class UserDaoImpl implements userDao {
@Override
public void queryUser() {
System.out.println(“用户登录了”);
}
}
1234567891011
package com.spring.quickTest;
public interface UserService {
void login();
}
123456789
package com.spring.quickTest;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserServiceImpl implements UserService {
private userDao userDao;
public void setUserDao(com.spring.quickTest.userDao userDao) {
this.userDao = userDao;
}
@Override
public void login() {
System.out.println(“准备登录中”);
// 1.传统方法
// userDao userDao = new UserDaoImpl();
// userDao.queryUser();
// 2.自定义工厂
// userDao user = (userDao) new UserdaoFactory().getBean();
// user.queryUser();
// 3spring 工厂
// ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);
// userDao userDao = (com.spring.quickTest.userDao) context.getBean(“userDao”);
userDao.queryUser();
}
}
12345678910111213141516171819202122232425262728293031
传统方法下的代码过于耦合;
例如:UserDao userDao = new UserDaoImpl();
如果要更换实现类,或者实现类换一个名字,此时代码会报错,必须要修改原来的业务代码。
我们也可以通过反射的方法自定义一个bean工厂来实现代码的解耦;
package com.spring.quickTest;
public class UserdaoFactory {
public Object getBean() {
try {
return Class.forName(“com.spring.quickTest.UserDaoImpl”).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null ;
}
}
1234567891011121314151617181920
我们就可以通过自定义的工厂进行实例化,然后调用dao层的方法,避免了耦合。
接下来也可以通过spring的工厂来实现解耦;
写好spring核心文件的配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”