各位大佬请问Java中关于spring框架的理解中的xml文件是怎么进行解析的?

22:31 提问
关于复杂的过滤和排序,java后端的,mybatis里面的sql语句怎么拼,急求,有大佬做过这样的么
enum OrderType
// 排序条件
struct SortCondition
0 require string fieldN
// 字段名称
1 require OrderType orderType = ASC;
// 排序方式
enum FilterOperator
enum FilterConnector
// 过滤条件
struct FilterCondition
0 require FilterO
// 过滤操作符
1 require FilterC
// 过滤操作符
// 店铺列表请求
struct ListShopReq
0 require UserS
// 用户会话
1 require int start = 1;
// 开始位置
2 require int limit = 10;
// 每页条数
3 optional vector&SortCondition& sortC
// 排序条件,支持:shopName,shopId,appKey
4 optional vector&FilterCondition& filterC
// 过滤条件,支持:shopName,shopId,appKey,status
```代码就是这样的了,要传店铺列表请求这些东西,vector就相当与list,有知道后台sql怎么拼的么,实在是懵逼
按时间排序
也就是说让你在service中根据各种条件拼接一句完整的sql String,传到mybatis,
XML中只需要
&select id="XXXX" parameteType="java.lang.String" resultType="java.util.Map"&
也不一定要在xml里面拼接动态sql。能实现这个功能也行
不是可以在xml直接写语句吗
上面这个怎么理解,具体怎操作,我不是很明白这个方法,这样应该可以解决我的问题,但是不知道怎么操作代码
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐org.apache.ibatis.exceptions.PersistenceException:
###构建SqlSession时出错。###该错误可能存在于mapper.xml中###处理mapper_resultMap [userMap] ###时发生错误原因:org.apache.ibatis.builder.BuilderException:解析SQL映射器配置时出错。原因:org.apache.ibatis.builder.BuilderException:解析Mapper XML错误。原因:org.apache.ibatis.builder.BuilderException:解析类时出错。原因:org.apache.ibatis.type.TypeException:无法解析类型别名'User'。原因:java.lang.ClassNotFoundException:在org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:82
)找不到类org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26) ) at
sun.reflect.NativeMethodAccessorImpl.invoke0
(Native Method) at cn.itcast.myBatis.UserDaoTest.setUp(UserDaoTest.java:26)at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:66)at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)at sun .reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:606) 在org.junit。 runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:45) 位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod的.java:42) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner .java:68) at org.junit.runners.ParentRunner
$ 3.run(ParentRunner.java:231) org.junit.runners.ParentRunner $ 1 org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:47)。 在org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 上的日程安排(ParentRunner.java:60)在org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:50) 在org.junit.runners。 ParentRunner $ 2.evaluate(ParentRunner.java:222) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse .jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在org.eclipse.jdt.internal
在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)上的.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:382)原因:org.apache.ibatis.builder.BuilderException:解析SQL映射器配置时出错。原因:org.apache.ibatis.builder.BuilderException:解析Mapper XML错误。原因:org.apache.ibatis.builder.BuilderException:解析类时出错。原因:org.apache.ibatis.type.TypeException:无法解析类型别名'User'。原因:抛出java.lang.ClassNotFoundException:找不到类:用户 在org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:109) 在org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder .java:92) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80) ... 25 more原因:org.apache.ibatis.builder.BuilderException:解析Mapper XML错误。原因:org.apache.ibatis.builder.BuilderException:解析类时出错。原因:org.apache.ibatis.type.TypeException:无法解析类型别名'User'。原因:java.lang.ClassNotFoundException:找不到类:User
org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:120) at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder .java:92) at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:322) at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:107) ...另有27个造成者:org.apache.ibatis.builder.BuilderException:错误解析类。原因:org.apache.ibatis.type.TypeException:无法解析类型别名'User'。原因:java.lang.ClassNotFoundException:无法找到类:用户 org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:103) 在org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java :264), 位于org.apache的org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:243) 处的org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:251) 。 ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:116) ... 30更多引起:org.apache.ibatis.type.TypeException:无法解析类型别名'用户'。原因:java.lang.ClassNotFoundException:无法找到类:用户 org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:117) 在org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:130 ) at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:101) ... 34更多原因:java.lang.ClassNotFoundException: 在org.apache.ibatis.io.ClassLoaderWrapper 找不到类:User 。在org.apache.ibatis.io.Resources.classForName(Resources.java:256) 处的org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89) 处使用classFormat(ClassLoaderWrapper.java:190 ) at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:113) ... 36 more
mybatis_SQL映射(2)出现的错误
(转载)http://blog.csdn.net/y/article/details/
1. sql的重用:定义一个sql片段,可在任何SQL语句中重用该片...
九月 28, :00 下午 org.apache.catalina.core.StandardContext listenerStart
严重: Exception sending...
第一次写,csdn博客,也是想分享以下经验。
这段时间遇到了这个问题
Cause: org.apache.ibatis.type.TypeException: Could not resolve ...
初学Mybatis 构建sqlSession 错误问题 Error building SqlSession Mybatis java.lang.NullPointerException
错误信息org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession.### The error m...
spring 整合mybatis 出现解析不了配置文件的问题
1,错误内容:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sql...
关于 Visual Studio 2005 SP1 安装的 2755 错误
今天是为 Visual Studio 2005 Team Suite 安装 SP1,这回可是全新的系统、全新的 ...
今天安装jdk的时候遇到的,之前安装node的时候也不行,我还以为是包的问题,用另外一种方法安上了,但是jdk没找到别的,研究了半天……最后发现,我的/private/tmp目录没了……有可能是什么时...
没有更多推荐了,原文:微信公众号:javafirst 用Spring框架做了几年的开发,只停留在会用的阶段上,然而Spring的设计思想和原理确实一个巨大的宝库。大部分人仅仅知道怎么去配,或着加上什么属性就能达到什么效果,这些东西都可以通过查文档,查google来解决。关键是在怎么理解它,把它的思想变为自己的东西。博主这几天没有学习(装逼),感觉心里甚是空虚,索性研究了下一直很好奇的Spring大佬,毕竟写代码天天都在用。
前方高能,非战斗人员迅速投入战斗:
1.Spring IOC容器
2.ApplicationContext与BeanFactory探究.
3.bean的加载
4.FactoryBean
5.Spring AOP实现原理及实战
文章篇幅有限,只对Spring几个重要的知识点进行简单阐述,有兴趣的可以看看,本文也是基于该书总结出来的。1.Spring IOC容器
很多人一提IOC,便张口就来:控制反转。究竟哪些方面被反转了呢?答案是依赖对象的获得被反转了。很多时候,我们通过多个对象之间的协作来完成一个功能,如果获取所依赖对象靠自身来实现,这将导致代码的耦合度高和难以测试。当然,控制反转还有一个好听的名字:依赖注入。
Spring IOC通过引入xml配置,由IOC容器来管理对象的生命周期,依赖关系等。
从图中可以看出,我们以前获取两个有依赖关系的对象,要用set方法,而用容器之后,它们之间的关系就由容器来管理。那么,Spring容器的加载过程是什么样的呢?
BeanDefinition是一个接口,用于属性承载,比如&bean&元素标签拥有class、scope、lazy-init等配置。bean的定义方式有千千万万种,无论是何种标签,无论是何种资源定义,无论是何种容器,只要按照Spring的规范编写xml配置文件,最终的bean定义内部表示都将转换为内部的唯一结构:BeanDefinition。当BeanDefinition注册完毕以后,Spring的BeanFactory就可以随时根据需要进行实例化了。2.ApplicationContext与BeanFactory探究.
实例化的工作会在容器启动后过AbstractApplicationContext中reflash方法自动进行。我们常用的ApplicationContext实现类ClassPathXmlApplicationContext继承了AbstractApplicationContext类,继承关系如下图.
AbstractApplicationContext里的reflash方法是Spring初始IOC容器一个非常重要的方法,不管你是ApplicationContext哪个实现类,最终都会进入这个方法。
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
prepareRefresh();
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
prepareBeanFactory(beanFactory);
postProcessBeanFactory(beanFactory);
invokeBeanFactoryPostProcessors(beanFactory);
registerBeanPostProcessors(beanFactory);
initMessageSource();
initApplicationEventMulticaster();
onRefresh();
registerListeners();
finishBeanFactoryInitialization(beanFactory);
finishRefresh();
catch (BeansException ex) {
logger.warn("Exception encountered during context initialization - cancelling refresh attempt", ex);
destroyBeans();
cancelRefresh(ex);
代码逻辑清晰的值得mark一下。这个方法的作用是创建加载Spring容器配置(包括.xml配置,property文件和数据库模式等)。
BeanFactory体系结构是典型的工厂方法模式,即什么样的工厂生产什么样的产品。要知道工厂是如何产生对象的,我们需要看具体的IOC容器实现,具体的实现有:如 DefaultListableBeanFactory 、 XmlBeanFactory 、 ApplicationContext 等。那么,究竟BeanFactory里到底是什么样的呢?package org.springframework.beans.
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
Object getBean(String name) throws BeansException;
&T& T getBean(String name, Class&T& requiredType) throws BeansException;
&T& T getBean(Class&T& requiredType) throws BeansException;
Object getBean(String name, Object... args) throws BeansException;
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class&?& targetType)
throws NoSuchBeanDefinitionException;
Class&?& getType(String name) throws NoSuchBeanDefinitionE
String[] getAliases(String name);
我们可以看出BeanFactory里只对IOC容器的基本行为作了定义,根本不关心你的bean是如何定义怎样加载的,它规定了所有的容器至少需要实现的标准。说到实现,BeanFactory有几个比较重要的实现类需要知道,ref:。那么BeanFactory的基本实现类XmlBeanFactory与我们常用的ApplicationContext有什么区别呢?答案是bean的加载。3.bean的加载。
我们先看一道面试经常会问到的问题:Spring的bean在什么时候实例化? ——第一:如果你使用BeanFactory,如XmlBeanFactory作为Spring Bean的工厂类,则所有的bean都是在第一次使用该bean的时候实例化 。第二:如果你使用ApplicationContext作为Spring Bean的工厂类,则又分为以下几种情况:
1.如果bean的scope是singleton的,并且lazy-init为false(默认是false,所以可以不用设置),则ApplicationContext启动的时候就实例化该bean,并且将实例化的bean放在一个线程安全的 ConcurrentHashMap 结构的缓存中,下次再使用该Bean的时候,直接从这个缓存中取 。
2.如果bean的scope是singleton的,并且lazy-init为true,则该bean的实例化是在第一次使用该bean的时候进行实例化 。
3.如果bean的scope是prototype的,则该bean的实例化是在第一次使用该Bean的时候进行实例化 。ClassPathXmlApplicationContext有几个重载的构造函数最终都会调用父类AbstractApplicationContext的reflash方法,reflash方法在前文有介绍,作用是创建加载Spring容器配置。AbstractApplicationContext也有getBean方法:AbstractApplicationContext下的代码:
public Object getBean(String name) throws BeansException {
return getBeanFactory().getBean(name);
}内部容器由DefaultListableBeanFactory承当,但真实的getBean方法实现是由其父类AbstractBeanFactory实现的,AbstractBeanFactory类同样实现了BeanFactory接口的方法,它有四个重载的getBean方法,不管哪一个都会去调用doGetBean方法:
那么doGetBean里干了什么事情呢?protected &T& T doGetBean(
final String name, final Class&T& requiredType, final Object[] args, boolean typeCheckOnly)
throws BeansException {
final String beanName = transformedBeanName(name);
Object bean = null;
Object sharedInstance = getSingleton(beanName);
if (sharedInstance != null && args == null) {
bean = getObjectForBeanInstance(sharedInstance, name, beanName, null);
if (isPrototypeCurrentlyInCreation(beanName)) {
throw new BeanCurrentlyInCreationException(beanName);}
BeanFactory parentBeanFactory = getParentBeanFactory();
if (parentBeanFactory != null && !containsBeanDefinition(beanName)) {
String nameToLookup = originalBeanName(name);
if (args != null) {
return parentBeanFactory.getBean(nameToLookup, args);
return parentBeanFactory.getBean(nameToLookup, requiredType);
if (!typeCheckOnly) {
markBeanAsCreated(beanName);
final RootBeanDefinition mbd = getMergedLocalBeanDefinition(beanName);
checkMergedBeanDefinition(mbd, beanName, args);
String[] dependsOn = mbd.getDependsOn();
if (dependsOn != null) {
for (int i = 0; i & dependsOn. i++) {
String dependsOnBean = dependsOn[i];
getBean(dependsOnBean);
registerDependentBean(dependsOnBean, beanName);
if (mbd.isSingleton()) {
sharedInstance = getSingleton(beanName, new ObjectFactory() {
public Object getObject() throws BeansException {
return createBean(beanName, mbd, args);
catch (BeansException ex) {
destroySingleton(beanName);
bean = getObjectForBeanInstance(sharedInstance, name, beanName, mbd);
else if (mbd.isPrototype()) {
Object prototypeInstance = null;
beforePrototypeCreation(beanName);
prototypeInstance = createBean(beanName, mbd, args);
afterPrototypeCreation(beanName);
bean = getObjectForBeanInstance(prototypeInstance, name, beanName, mbd);
String scopeName = mbd.getScope();
final Scope scope = (Scope) this.scopes.get(scopeName);
if (scope == null) {
throw new IllegalStateException("No Scope registered for scope '" + scopeName + "'");
Object scopedInstance = scope.get(beanName, new ObjectFactory() {
public Object getObject() throws BeansException {
beforePrototypeCreation(beanName);
return createBean(beanName, mbd, args);
afterPrototypeCreation(beanName);
bean = getObjectForBeanInstance(scopedInstance, name, beanName, mbd);
catch (IllegalStateException ex) {
throw new BeanCreationException(beanName,
"Scope '" + scopeName + "' is not active fo " +
"consider defining a scoped proxy for this bean if you intend to refer to it from a singleton",
if (requiredType != null && bean != null &&
!requiredType.isAssignableFrom(bean.getClass())) {
throw new BeanNotOfRequiredTypeException(name, requiredType, bean.getClass());
bean的加载经历了一个复杂的过程,上面代码主要做了以下几件事(此段摘抄自):
1.转换对应的beanName。如果name=“&aa”的,会去除&符号。或者&bean&标签带有alias(别名的意思),则取alias所表示最终的beanName。
2.尝试从缓存中加载单例bean。如果加载不成功,会再次尝试从singletonFactories中加载。
3.bean的实例化。假如我们需要对工厂bean进行处理,那么这里得到的其实是工厂bean 的初始状态。真正干活的则是getObjectForBeanInstance定义factory-method方法返回的bean。
4.原型模式的依赖检查。如果A类有B的属性,B中有A的属性,则会产生循环依赖。
5.将存储的Xml配置文件的GernericBeanDefinition转换为RootBeanDefinition。前文提到的用于承载属性的BeanDefinition有三个实现,GernericBeanDefinition,RootBeanDefinition和ChildBeanDefinition,如果父类bean不为空的话,这里会把所有的属性一并合并父类属性,因为后续所有的Bean都是针对RootBeanDefinition的。
6.寻找依赖。在初始化一个bean的时候,会首先初始化这个bean所对应的依赖。
7.根据不同的scope创建bean。scope属性默认是singleton,还有prototype、request等。
8.类型转换。如果bean是个String,而requiredType传入了Integer,然后返回bean,加载结束。其中,最重要的步骤是(7),spring的常用特性都在那里实现.4.FactoryBean
首先要分辨BeanFactory 与 FactoryBean的区别, 两个名字很像,所以容易搞混。这里做一个简单的比喻你就明白了:
1.FactoryBean:工厂类接口,用户可以通过实现该接口定制实例化 bean的逻辑。我们把bean比作是人,那么FactoryBean则是女娲,首先它本身有人的特征,但它能够生产人。
2.BeanFactory :BeanFactory定义了 IOC 容器的最基本形式。如果bean还比作是人,那么它可以理解成三界,三界里有各种功能的人,它是一个容器,可以管理很多的人。FactoryBean里干了什么事情?public interface FactoryBean&T& {
T getObject() throws Exception;
Class&?& getObjectType();
boolean isSingleton();
}它的作用不在这里做阐述,ref:写到这里,博主总结一下阅读Spring源码的心得:
1.学习Spring思想和编码规范。Spring的很多函数代码量大,逻辑复杂,而Spring的编码风格就是将复杂的逻辑分解,分成N个小函数的嵌套,每一层都是对下一层的总结和概要。博主在工作中最佩服的一个大神说过:学习Spring源码思想为我所用,哪怕是一天学习一个变量名,他在工作中设计很多小组件的时候都是基于Spring思想和规范。他说,不要迷茫学什么技术,其实每天只要进步一点点就好,突破的是自己,而不是某个领域。用10年其实才敢说入门一门技术。
2.跟了Spring代码的函数,你会或多或少发现一些规律:一个真正干活的函数其实是以do开头的,如doGetBean,而给我们错觉的函数,如getBean和createBean等等方法,其实只是从全局角度做一些统筹工作。
3.放弃阅读源码是一个不明智的选择,因为你失去了跟大师学习的机会。当你硬着头皮读完一个框架的源码,则其他框架都是相通的。
4.博主的下一篇文章:
因为篇幅有限,而博主的已经搞了一天代码,手已经快练成麒麟臂,AOP又是一个重要且内容比较多的部分,所以打算单独拿出来搞事情。微信公众号:javafirst
Spring事件体系
Spring事件体系包括三个组件:事件,事件监听器,事件广播器。
事件:ApplicationEvent
事件监听器:ApplicationListener,对监听到的事件进行...
spring框架做了几年的开发,只停留在会用的阶段上,然而spring的设计思想和原理确实一个巨大的宝库.大部分人仅仅知道怎么去配,或着加上什么属性就能达到什么效果,这些东西都可以通过查文档,查goo...
1、spring是做什么的
1. 根据Spring最核心的功能IOC(或者说DI)--依赖注入,可以看出Spring主要是帮助你管理你的类实例的,也就是说Spring是一个容器,容器在启动的时候...
优秀的源码中有着多年沉积下来的精华,这些精华是非常值得我们学习的。放弃阅读源码,你将失去一个和大师学习的机会。用Spring框架做了几年的开发,只停留在会用的阶段上,然而Spring的设计思想和原理确...
用Spring框架做了几年的开发,只停留在会用的阶段上,然而Spring的设计思想和原理确实一个巨大的宝库。大部分人仅仅知道怎么去配,或着加上什么属性就能达到什么效果,这些东西都可以通过查文档,查go...
1、Jeff Dean
2、Andrew NG
3、Greg Corrado
4、Sebastian Thrun
5、Yan LeCun
用spring框架做了几年的开发,只停留在会用的阶段上,然而spring的设计思想和原理确实一个巨大的宝库。大部分人仅仅知道怎么去配,或着加上什么属性就能达到什么效果,这些东西都可以通过查文档,查go...
没有更多推荐了,各位大佬们,求《30天学通JAVA项目案例开发》pdf版_百度知道
各位大佬们,求《30天学通JAVA项目案例开发》pdf版
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
以道承诺未就业全额退款
以道教育作为专业的IT培训教育公司,目前主要进行java大数据、云计算、人工智能、web全栈培训服务,提出“就业是检验真理的唯一标准”的教育理念,以道承诺未就业全额退还学费。
《30天学通Java Web项目案例开发》PDF 下载下载地址:链接: 密码:id7x图书简介:Java是目前最流行、发展最快的编程语言之一,由于其开放,跨平台的特点,吸引了众多的开发人员与软件公司。同时在众多软件公司及有志之士的共同努力下,出现了许多优秀的开源框架,为Java语言在企业级开发领域注入了新的血液。本书结合具体的项目案例向读者介绍了Java EE开发的整个流程,本书共介绍了10个项目案例,涵盖了目前几个比较流行的开源框架,如Struts、Spring、Hibernate、JSF,同时还有用于分布式企业级开发的EJB技术,在项目的开发过程中,笔者还多次使用到了Ajax技术,以增强用户体验。在每一个项目案例的介绍中,笔者都是按照实际的开发步骤进行的,一个模块一个模块地进行介绍。对每一个项目的代码都进行了详细的介绍,对核心代码还进行了详细的代码注释,尽量让读者读懂代码中的每一行,每一个细节。本书不仅仅是向读者介绍几个案例,更是为了让读者熟悉这些开源框架的使用,其中也包含了笔者很多的开发技巧与开发经验,因此对于Java EE初学者及具有一定开发基础的编程人员,都是一本不错的参考书。
这个不是java web么。。。
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 spring框架搭建步骤 的文章

 

随机推荐