Spring 基于 xml 配置的快速入门(超详细),数据库事务深入分析
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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="userDao" class="com.spring.quickTest.UserDaoImpl"/>
<bean name="UserService" class="com.spring.quickTest.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
</beans>
123456789101112
我们将 dao 层交给 spring 工厂后发现还是不够方便,就将 service 层也交给 spring 工厂来控制 ,将 bean 标签下的 property 进行依赖注入这样我们只要声明下成员变量后并进行 set 方法赋值就可以直接引用了,不需要在创建 spring 工厂了。
ps:
标签说明: bean: spring 工厂创建的一个对象(反射机制)
id/name:对象的名字,可以用来引用或者获取对象, 一般为类名或接口名称的首字母小写
class:要创建的对象类型的类字符串,类名全路径
注入对象
评论