我已经读完了spring文档和PetClinic示例项目。 就像看到一个更大的现实世界项目是用Spring完成的。 谢谢。
问候,目前正在开发小型Web服务应用程序,其中来自Web服务(使用CXF + Spring)的响应被处理并保存到数据库中。 为了使用数据库,我使用了Hibernate(3.5)。 在网上浏览一些Hibernate + Spring的例子,我经常可以看到HibernateTemplate的用法,所以我对这一刻有些困惑,想问一下: 你在你的Hibernate3应用程序中使用HibernateTemplate吗? 何时HibernateTemplate可以使您的开发生活更好,并根据我可以决定什么点我需要使用它吗? 谢谢。
以下Spring框架类的主要区别是什么? Model ModelMap ModelAndView 使用Model.put(String,Object)我们可以访问.jsp文件中的值,但是ModelMap.addAttribute(String,Object)也做同样的事情。 我不明白这些类之间的区别。
我是初学者,spring,ESP反转控制。 我很困惑理解以下的区别 <bean id="demo" class="Demo" lazy-init="false"/> <bean id="demo" class="Demo" lazy-init="true"/> <bean id="demo" class="Demo" lazy-init="default"/> 据我的理解:lazy-init = false在启动时创buildbean,lazy-init = true不会在启动时创build一个bean,而是根据请求创build一个特定的bean。 在这里纠正我,如果我的解释是错误的。 lazy-init的默认行为是什么? 它将如何实例化?
我的Spring 3应用程序中的每个视图都有一组可以依赖的属性。 所以每个控制器的第一行是这样的: ControllerHelper.addDefaultModel(model, personManager, request); 在那里我会补充 用户对象和从数据库检索到的全名(如果有人login) 通常设置一次的variables集(如imagesHost ) 访客可以切换到的一组语言 当前的语言 一些统计数据(例如我们系统中的总人数) 这一切都允许每个视图显示login用户的名称,轻松引用图像的位置,语言列表和一些有关该网站的整体统计。 所以问题是,控制器模型对象是存储所有数据的最佳位置,还是有一个更方便的地方,这使得视图访问这些信息一样容易? 其次,我真的很喜欢不必在每个控制器中都有上面的ControllerHelper行作为第一行。 实际上并不总是第一行,有时我首先检查是否需要在控制器中redirect,因为我不想浪费资源来填充模型。 也许filter或注释或者一些Springcallback机制可以确保ControllerHelper代码在控制器完成之后但在视图呈现之前被调用,如果redirect被返回,则跳过这一点?
Rails是否具有MVC方法的事实意味着dependency injection? 还是有一个原因,我们不谈论在Rails的dependency injection? 如果Rails确实有dependency injection,它是由什么组成的?
Spring 3引入了一个新的expression式语言 (SpEL),可以在bean的定义中使用。 语法本身是相当明确的。 不清楚的是,SpEL是如何与先前版本中已经存在的属性占位符语法进行交互的。 SpEL是否支持财产占位符,还是我必须结合这两种机制的语法,并希望它们结合? 让我举一个具体的例子。 我想使用属性语法${xyz} ,但增加了elvis运算符提供的“默认值”语法来处理${xyz}未定义的情况。 我已经尝试了下面的语法,但没有成功: #{xyz?:'defaultValue'} #{${xyz}?:'defaultValue'} 第一个给我 在'org.springframework.beans.factory.config.BeanExpressionContext'types的对象上找不到字段或属性'x' 这表明SpEL不会将其识别为属性占位符。 第二个语法抛出一个exception,说占位符不被识别,所以占位符parsing器正在被调用,但是由于该属性没有被定义而失败。 文档没有提到这种交互,所以这样的事情是不可能的,或者是没有logging的。 任何人设法做到这一点? 好的,我想出了一个小型的,自包含的testing案例。 这一切都按原样运行: 首先,这个bean的定义: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/beans 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/util http://www.springframework.org/schema/util/spring-util.xsd "> <context:property-placeholder properties-ref="myProps"/> <util:properties id="myProps"> <prop key="xyz">Value A</prop> </util:properties> <bean id="testBean" class="test.Bean"> <!– here is where the magic is […]
我喜欢基于构造函数的注入,因为它允许我使注入的字段final 。 我也喜欢注解驱动注入,因为它简化了我的context.xml 。 我可以用@Autowired标记我的构造函数,一切正常,只要我没有两个相同types的参数。 例如,我有一个类: @Component public class SomeClass { @Autowired(required=true) public SomeClass(OtherClass bean1, OtherClass bean2) { … } } 和一个应用程序上下文: <bean id="bean1" class="OtherClass" /> <bean id="bean2" class="OtherClass" /> 应该有一种方法来指定类SomeClass的构造函数上的bean ID,但是我在文档中找不到它。 这是可能的,还是我梦想着一个不存在的解决scheme?
我知道有很多文章解释了如何在Java EE中使用CDI,但是我很难弄清楚这实际上带来了什么好处。 例如,假设我有一个当前使用Foo实例的类。 我可能会这样做 Foo myFoo = new Foo(); 要么 // Better, FooFactory might return a mock object for testing Foo myFoo = FooFactory.getFoo(); 我一直用CDI阅读,我可以这样做: @Inject Foo myFoo; 但为什么这比以前的工厂为基础的方法更好? 我假设有一些其他的用例,我不知道,但我一直无法确定这一点。 如果我已经理解了下面的回答,那么这个概念就是DI框架作为一个集中configuration的主对象工厂。 这是一个合理的解释? 更新 自从我开始学习Spring之后,现在变得更有意义了。 下面的段落取自实践中的Spring,以AccountService类为例,该类又使用了AccountDao一个实例。 我为长篇大论表示抱歉,但是我认为它真正成为注入资源为什么会提供标准初始化的核心。 您可以使用new关键字构造AccountService,但是创build服务层对象很less如此简单。 他们通常依赖于DAO,邮件发送者,SOAP代理以及其他东西。 您可以在AccountService构造函数中(或通过静态初始化)以编程方式实例化这些依赖关系中的每一个,但这会导致在被交换出来时出现严重的依赖关系和级联更改。 此外,您可以创build外部依赖关系,并通过setter方法或构造函数参数将它们设置在AccountService上。 这样做可以消除内部依赖关系(只要它们是通过接口在AccountService中声明的),但是到处都有重复的初始化代码。 以下是你如何创build一个DAO,并以Spring方式连接到你的AccountService: <bean id="accountDao" class="com.springinpractice.ch01.dao.jdbc.JdbcAccountDao"/> <bean id="accountService" class="com.springinpractice.ch01.service.AccountService"> <property name="accountDao" ref="accountDao"/> </bean> 像上面那样configuration好了bean之后,你的程序现在可以从Spring ApplicationContext中请求一个AccountService的实例,而Spring DI框架将会在实例化所有需要实例化的东西之后。
我有一个非常简单的Spring Boot应用程序,我试图使用一些外部configuration。 我试图按照春季启动文档的信息,但我正在打一个路障。 当我在application.properties文件中的外部configuration下运行应用程序时,不会将其填充到bean中的variables中。 我确信我正在做一些愚蠢的,谢谢你的任何build议。 MyBean.java (位于/ src / main / java / foo / bar /) package foo.bar; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.stereotype.Component; @Component public class MyBean { @Value("${some.prop}") private String prop; public MyBean() { System.out.println("================== " + prop + "================== "); } } Application.java (位于/ src / main / java […]