关于Spring 3框架的一堆问题


问题内容

这是阅读Spring Reference所产生的问题,请帮忙。

(1)我是否需要手动创建ApplicationContext?我是否需要AplicationContext的第二个实例?

(2)我们有以下配置说明:

<context:annotation-config/> 
<context:component-scan base-package=".."/> 
<mvc:annotation-driven/>

这些指示会自我复制吗?在哪种情况下是,在哪种情况下不?

(3)我对Spring引入的从字符串到对象的转换所采用的所有方法有些困惑:PropertyEditor,Conversions,Formatting
..这是一个简单的用例:我有一个处理某些POST请求的Spring
MVC控制器。该请求是填写某种表格的结果。该表格是某个实体的网络表示形式。因此,给定用户提交新的项目表单。该表单中有一个日期字段和一个经理姓名字段,可以从现有经理列表中选择。输入的日期应转换为Project对象的Date属性,并将经理的名称转换为Manager属性,并以此名称创建或定位(即,我想将Manager注入他的Project中)。在这种情况下我应该使用什么?属性编辑器,格式化程序,还有其他功能吗?

(4)通常,我可以说Spring可以将在classpath上找到的所有@interface类用作注释吗?换句话说,我如何知道可以在我的项目中使用哪些注释?所有这些都可以在我的类路径中找到,或者我需要以某种方式注册它们?

(5)我尝试使用不带aspectj.jar的spring
aop:刚刚创建了一个Aspect并为此方面添加了XML定义(没有任何注释)。结果,它抛出“找不到类异常:org / aspectj / weaver /
BCException”。如此看来,如果没有AspectJ库,我将无法使用Spring AOP?


问题答案:

(1)我是否需要手动创建ApplicationContext?我是否需要AplicationContext的第二个实例?

Spring通常用于两种环境-Web开发和桌面应用程序/独立服务器中。在前一种情况下,它ApplicationContext是通过Servlet
3.0容器ContextLoaderListenerweb.xmlWebContextInitializerServlet
3.0容器中的定义自动创建的。

在后一种情况(独立应用程序)中,您负责创建 和销毁 应用程序上下文。


(2)我们有以下配置说明:

<context:component-scan base-package=".."/>提供<context:annotation- config/>加号(惊奇!)组件扫描的所有功能。<mvc:annotation-driven/>是完全独立的,并且可以识别spring-
mvc
注释,例如@Controller


[…]输入的日期应转换为Project对象的Date属性[…]

在内注册自定义编辑器@Controller

@Controller
public class FooController {
    @InitBinder
    public void binder(WebDataBinder binder) {
        binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
            public void setAsText(String value) {
                try {
                    setValue(new SimpleDateFormat("yy-MM-dd HH:mm:ss").parse(value));
                } catch (ParseException e) {
                    setValue(null);
                }
            }
        });
    }
}

[…]我怎么知道可以在我的项目中使用哪些注释?[…]

我前段时间发现了这个很棒的注释支持表(我不是作者)。它将告诉您何时启用了哪些注释。


所有这些都可以在我的类路径中找到

@Inject
如果在CLASSPATH上找到它,则启用,则需要手动启用其他注释,请参见上文。


如此看来,如果没有AspectJ库,我将无法使用Spring AOP?

如果仅使用接口代理(即,仅将方面应用于实现至少一个接口的类),则可以使用不带CGLIB的Spring。否则,您需要CGLIB动态创建子类。