[
http://jira.jboss.com/jira/browse/JBSEAM-1584?page=comments#action_12367584 ]
Michael Youngstrom commented on JBSEAM-1584:
--------------------------------------------
With the fix of JBSEAM-1583 @Logger should work fine if you use <seam:component/> or
<seam:component intercept="false"/> if you don't want seam to create a
proxy. Is that good enough? Or do you want a SeamLoggerPostProcessor?
Mike
@Logger and Spring beans
------------------------
Key: JBSEAM-1584
URL:
http://jira.jboss.com/jira/browse/JBSEAM-1584
Project: JBoss Seam
Issue Type: Feature Request
Components: Spring
Affects Versions: 2.0.0.BETA1
Reporter: Magnus Heino
Assigned To: Michael Youngstrom
It would be nice if spring beans could be scanned for @Logger and injected with Log
instances just like seam components.
Using the code below, you can add this to applicationContext.xml...
<bean class="org.jboss.seam.ioc.spring.LoggerPostProcessor" />
...to have all spring beans scanned for @Logger and have a Log instance injected, just
like seam components. Then you can access the same context and log functionallity in your
spring beans as in your seam components.
I guess the seam spring namespace could be extended with <seam:logger/> to make it
even more simple to use.
package org.jboss.seam.ioc.spring;
import java.lang.reflect.Field;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.log.Logging;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.util.ReflectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.util.ReflectionUtils.FieldCallback;
public class LoggerPostProcessor implements BeanPostProcessor {
public Object postProcessAfterInitialization(Object bean, String beanName) throws
BeansException {
return bean;
}
public Object postProcessBeforeInitialization(final Object bean, final String beanName)
throws BeansException {
ReflectionUtils.doWithFields(bean.getClass(), new FieldCallback() {
public void doWith(Field field) throws IllegalArgumentException,
IllegalAccessException {
if (field.isAnnotationPresent(Logger.class)) {
String category = field.getAnnotation(Logger.class).value();
if(!StringUtils.hasText(category)) {
category = bean.getClass().getName();
}
ReflectionUtils.makeAccessible(field);
field.set(bean, Logging.getLog(category));
}
}
});
return bean;
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira