有没有办法根据分散在各个类中的Spring 3注释生成完整的XML配置文件?
理想情况下,我正在寻找一种可以"解析"Spring 3项目并输出XML配置的工具,就像xdoclet正在做的那样(但是从Spring注释中脱离)
有没有像这样的工具,或者如果不存在的话我可以自己写一个方法?
正如在上面的标题中,我很困惑通过直接@Autowired注释注入applicationContext或在单例spring bean中实现ApplicationContextAware接口之间的优缺点.
您更喜欢哪一种?为什么?谢谢.
我正在使用Spring的转换服务,并在其中注册了我自己的转换器:
public class MyTypeConverter implements Converter<String, MyType> {
    @Override
    public Currency convert(String text) {
        MyType object = new MyType();
        // do some more work here...
        return object;
    }
}
现在,在我的应用程序中,我可以进行转换String,MyType并且运行良好:
@Autowired
private ConversionService cs;
public void doIt() {
    MyType object = cs.convert("Value1", MyType.class);
}
但是我也注意到,例如,我可以在我的MVC控制器中使用相同的转换器,它也以某种方式处理列表:
@RequestMapping(method = RequestMethod.GET, value = "...")
@ResponseBody
public final String doIt(@RequestParam("param1") List<MyType> objects) throws Exception {
    // ....
}
因此,如果我param1=value1,value2在控制器中提交,我会收到一个List<MyType>包含两个元素的内容.所以spring会用逗号分割String,然后将每个元素分别转换为MyType.是否有可能以编程方式执行此操作?
我需要类似这样的东西:
List<MyType> objects = cs.convert("Value1,Value2", …为什么spring没有绑定嵌套对象上的值?
尽管在视图中使用bean表示法在表单中进行设置,但RegistrationBean上的SecurityQuestion对象分别设置为问题和答案为null,null.
豆子:
public class SecurityQuestion {
  SecurityQuestionType type;
  String answer;
}
public class RegistrationBean {
  @Valid
  SecurityQuestion securityQuestion;
  String name;
  public SecurityQuestionType[] getSecurityQuestionOptions() {
    return SecurityQuestionType.values();
  }
}
视图:
<form:form modelAttribute="registrationBean" method="POST">
  <form:select id="securityQuestion" path="securityQuestion.question">
    <c:forEach var="securityQuestionOption" items="${securityQuestionOptions}">
      <form:option value="${securityQuestionOption}">${securityQuestionOption</form:option>
    </c:forEach>
  </form:select>
  <form:input id="securityAnswer" path="securityQuestion.answer" />
  <form:input id="name" path="name" />
</form:form>
控制器:
@RequestMapping(value = URL_PATTERN, method = RequestMethod.POST)
public ModelAndView submit(@Valid final RegistrationBean registrationBean) {
  // registrationBean.getSecurityQuestion().getQuestion() == null
  // registrationBean.getSecurityQuestion().getAnswer() == null
}
解
所有bean都必须拥有所有字段的getter/setter.Spring使用默认构造函数,然后使用setter从视图中改变对象.
所以当我尝试从jconsole连接到jmx时,我得到了这个异常:
Caused by: java.rmi.ConnectException: Connection refused to host: 78.84.17.116; nested exception is: 
    java.net.ConnectException: Connection timed out: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198)
    ...
我试图在jconsole中连接到这样的url: service:jmx:rmi:///jndi/rmi://78.84.17.116:43030/test
我的jmx spring配置:
<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <context:mbean-server />
    <bean id="jmxExporter" class="org.springframework.jmx.export.MBeanExporter">
        <property name="server" ref="jmxServer" />
        <property name="assembler">
            <bean
                class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
                <property name="attributeSource">
                    <bean
                        class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" />
                </property>
            </bean>
        </property>
        <property name="beans">
            <map>
                <entry key="SpringBeans:name=hibernateStatisticsMBean"
                    value-ref="hibernateStatisticsMBean" />
            </map>
        </property>
    </bean>
    <bean id="jmxServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"
        p:locateExistingServerIfPossible="false" />
    <bean id="serverConnector"
        class="org.springframework.jmx.support.ConnectorServerFactoryBean"
        depends-on="rmiRegistry" p:objectName="connector:name=rmi" …我尝试了这里的答案:Hibernate Validator,自定义ResourceBundleLocator和Spring
但仍然只是{location.title.notEmpty}作为输出而不是消息.
调度员servlet.xml中
<bean name="validator"
    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource">
        <ref bean="resourceBundleLocator"/>
    </property>
</bean>
<bean name="resourceBundleLocator" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>/WEB-INF/validationMessages</value>
        </list>
    </property>
</bean>
/WEB-INF/validationMessages.properties:
location.title.notEmpty=My custom message
表格(课程地点)
@NotEmpty( message = "{location.title.notEmpty}" )
private String title;
这里出了什么问题?
我可以在方法中使用@value注释来读取属性吗?
    void method1(){
     @Value("#{AppProperties['service.name']}") String name;
     -------
      -------
   } 
我有一个带Maven的多模块Spring项目.我正在使用Spring 3.2.3和注释配置.
我有以下布局:
parent
    common  (depends on parent)
    webapp  (depends on parent, common, module1, module2)
    module1 (depends on parent)
    module2 (depends on parent)
我需要它common,module1并且module2可以指定自己的i18n属性(并webapp收集这些文件并以某种方式提供它们?!):
common:  src/main/resources/i18n/messages_en.properties
module1: src/main/resources/i18n/messages_en.properties
module2: src/main/resources/i18n/messages_en.properties
我试过用
@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:/i18n/messages");
    messageSource.setDefaultEncoding("UTF-8");
    messageSource.setUseCodeAsDefaultMessage(true);
    return messageSource;
}
但是看起来Spring只会使用其中一个翻译文件,而是应该使用all.
另一种可能性是为每个模块指定一个唯一的属性文件名,但后来我不知道要设置的基本名称messageSource.setBasename(...).
谢谢你的帮助!
spring spring-mvc internationalization multi-module spring-3
在我的Web应用程序中,当我尝试注销时,它将转到给j_spring_security_logout定的页面.在我的spring-security.xml页面中,我添加了
<logout logout-success-url="/login" delete-cookies="JSESSIONID" />
当我使用spring security 3.1.4.RELEASE版本时,问题就是这个问题.现在我正在使用3.2.2.RELEASE
我也尝试了以下内容.没工作
<logout logout-url="/logout" delete-cookies="JSESSIONID" />
弹簧security.xml文件
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="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-3.0.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security.xsd">
<http auto-config='true'>
    <intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page="/login" default-target-url="/transaction-view"
        always-use-default-target="true" authentication-failure-url="/loginfailed" />
    <logout logout-url="/logout" logout-success-url="/login.jsp" delete-cookies="JSESSIONID" />
    <session-management invalid-session-url="/invalidSession.htm">
        <concurrency-control max-sessions="1"
            error-if-maximum-exceeded="true" /> <!--this will throw error to second login attempt -->
    </session-management>
    <!-- <custom-filter before="FORM_LOGIN_FILTER" ref="myFilter" /> -->
    <csrf />
</http>
<beans:bean id="customSecurityService"
    class="com.fg.monitoringtool.web.security.SecurityService"></beans:bean>
<beans:bean id="passwordEncoder"
    class="com.fg.monitoringtool.web.security.PasswordEncoderMD5"></beans:bean> …我想像这样做@CrossOrigin:
@CrossOrigin(origins = "http://domain2.com")
@RequestMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
    // ...
}
(假设升级到Spring 4受到限制)目前我在Spring 3中所要做的就是这样:
public class CORSFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request= (HttpServletRequest) req;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        response.setHeader("Access-Control-Expose-Headers", "x-requested-with"); chain.doFilter(req, res);
    }
}
请注意,@CrossOriginSpring 4.2中的实现源是在这里.
我的问题是:如何在Spring 3中进行@CrossOrigin注释?
spring-3 ×10
spring ×8
java ×4
spring-mvc ×4
annotations ×2
cors ×1
frameworks ×1
hibernate ×1
jmx ×1
jsp ×1
logout ×1
multi-module ×1
spring-form ×1