有没有办法根据分散在各个类中的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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的应用程序中,我可以进行转换String,MyType并且运行良好:
@Autowired
private ConversionService cs;
public void doIt() {
MyType object = cs.convert("Value1", MyType.class);
}
Run Code Online (Sandbox Code Playgroud)
但是我也注意到,例如,我可以在我的MVC控制器中使用相同的转换器,它也以某种方式处理列表:
@RequestMapping(method = RequestMethod.GET, value = "...")
@ResponseBody
public final String doIt(@RequestParam("param1") List<MyType> objects) throws Exception {
// ....
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我param1=value1,value2在控制器中提交,我会收到一个List<MyType>包含两个元素的内容.所以spring会用逗号分割String,然后将每个元素分别转换为MyType.是否有可能以编程方式执行此操作?
我需要类似这样的东西:
List<MyType> objects = cs.convert("Value1,Value2", …Run Code Online (Sandbox Code Playgroud) 为什么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();
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
<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>
Run Code Online (Sandbox Code Playgroud)
控制器:
@RequestMapping(value = URL_PATTERN, method = RequestMethod.POST)
public ModelAndView submit(@Valid final RegistrationBean registrationBean) {
// registrationBean.getSecurityQuestion().getQuestion() == null
// registrationBean.getSecurityQuestion().getAnswer() == null
}
Run Code Online (Sandbox Code Playgroud)
解
所有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)
...
Run Code Online (Sandbox Code Playgroud)
我试图在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" …Run Code Online (Sandbox Code Playgroud) 我尝试了这里的答案: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>
Run Code Online (Sandbox Code Playgroud)
/WEB-INF/validationMessages.properties:
location.title.notEmpty=My custom message
Run Code Online (Sandbox Code Playgroud)
表格(课程地点)
@NotEmpty( message = "{location.title.notEmpty}" )
private String title;
Run Code Online (Sandbox Code Playgroud)
这里出了什么问题?
我可以在方法中使用@value注释来读取属性吗?
void method1(){
@Value("#{AppProperties['service.name']}") String name;
-------
-------
}
Run Code Online (Sandbox Code Playgroud) 我有一个带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)
Run Code Online (Sandbox Code Playgroud)
我需要它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
Run Code Online (Sandbox Code Playgroud)
我试过用
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/i18n/messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setUseCodeAsDefaultMessage(true);
return messageSource;
}
Run Code Online (Sandbox Code Playgroud)
但是看起来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> …Run Code Online (Sandbox Code Playgroud) 我想像这样做@CrossOrigin:
@CrossOrigin(origins = "http://domain2.com")
@RequestMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
(假设升级到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);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,@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