如何为带有注释的 spring 设置 context.xml?

Posted

技术标签:

【中文标题】如何为带有注释的 spring 设置 context.xml?【英文标题】:How to set up a context.xml for spring with annotations? 【发布时间】:2015-06-23 11:54:08 【问题描述】:

我正在使用 Tomcat 来托管一个 webapp,并且想知道我是否可以使用 Spring 注释在 tomcat 的 conf 文件夹中创建等效于 context.xml 的内容。一个例子context.xml

<?xml version="1.0" encoding="UTF-8"?> <!-- The contents of this file will be loaded for each web application -->
<Context> <!-- Default set of monitored resources -->
    <ResourceLink name="jdbc/SomeDB" global="jdbc/SomeDB" type="javax.sql.DataSource"/>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

如果这可能与注释有关,你能用一个例子告诉我它是如何完成的吗?

【问题讨论】:

请说明为什么需要创建 context.xml 的等效项。 我正在使用的服务器上应该有默认的 context.xml,因为它上面运行着许多其他 webapps。 为什么你不能将你的配置添加到这样的默认上下文中?有lots of strategies 可以做到这一点。 【参考方案1】:

我需要使用@ContextConfiguration 来指向我想要使用的xml。

【讨论】:

【参考方案2】:

据我所知,没有等效于以下applicationContext.xml 片段的注释:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    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-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd">

    <jee:jndi-lookup
        id="someDbDataSource"
        jndi-name="jdbc/SomeDB"
        resource-ref="true" />
    ...

因为将数据源注入 DAO 非常容易:

public class SomeDbJdbcDaoSupport 

    public static final String SOME_DB_DATA_SOURCE = "someDbDataSource";
    private JdbcTemplate jdbcTemplate;

    @Autowired
    @Qualifier(SOME_DB_DATA_SOURCE)
    public void setSomeDbDataSource(DataSource dataSource) 
        if (jdbcTemplate == null || dataSource != jdbcTemplate.getDataSource()) 
            jdbcTemplate = new JdbcTemplate(dataSource);
        
    
    ...

数据源配置被写入服务器配置文件,因为服务器管理连接池,但如果您使用不同的池管理器,如 c3po,您将在 spring configuration files 中定义数据源属性,避免任何数据源服务器配置。

【讨论】:

以上是关于如何为带有注释的 spring 设置 context.xml?的主要内容,如果未能解决你的问题,请参考以下文章

如何为多个组绘制带有注释的堆叠条

如何为列谷歌图表添加填充

如何为 Spring Boot 应用程序设置自定义 Http 标头“服务器”

如何为MKMapKit注释移除设置动画

如何为 React 钩子(useState 等)做流类型注释?

spring @Value如何为变量java赋值[关闭]