写点什么

Spring 基于 xml 配置的快速入门(超详细),数据库事务深入分析

用户头像
极客good
关注
发布于: 刚刚

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


如果要更换实现类,或者实现类换一个名字,此时代码会报错,必须要修改原


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


来的业务代码。


我们也可以通过反射的方法自定义一个 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:要创建的对象类型的类字符串,类名全路径


注入对象

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Spring 基于 xml 配置的快速入门(超详细),数据库事务深入分析