Java 实现spring自定义注释的作用类似于@Transactional
我想实现一些常见的注释行为,比如@Transactional annotation 在挖掘了spring核心代码并进行了一些谷歌搜索之后,我了解到,如果我将@Transactional注释放在一个方法中,那么该方法就会被代理包装起来。但是,我仍然不知道如何独自实现这样的事情Java 实现spring自定义注释的作用类似于@Transactional,java,spring,Java,Spring,我想实现一些常见的注释行为,比如@Transactional annotation 在挖掘了spring核心代码并进行了一些谷歌搜索之后,我了解到,如果我将@Transactional注释放在一个方法中,那么该方法就会被代理包装起来。但是,我仍然不知道如何独自实现这样的事情 有详细的指南吗?注释是JavaEE特性,不是Spring特有的。假设您想要实现一个名为@CourseCode的自定义注释,该注释验证课程代码是否以默认值“ABC”开头。您可能还希望覆盖要验证的默认值,例如“XYZ” 您需要为
有详细的指南吗?注释是JavaEE特性,不是Spring特有的。假设您想要实现一个名为@CourseCode的自定义注释,该注释验证课程代码是否以默认值“ABC”开头。您可能还希望覆盖要验证的默认值,例如“XYZ” 您需要为CourseCode定义@interface并为其实现ConstraintValidator 以下是一个例子: 典型用法
@CourseCode(value="XYZ", message="must start with XYZ") // value and message are optional
private String courseCode;
@课程代码实现
package my.package.springdemo.mvc.validation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Constraint(validatedBy = CourseCodeConstraintValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CourseCode {
// Define default course code
public String value() default "ABC";
// Define default error message
public String message() default "must start with ABC";
// Define default groups
public Class<?>[] groups() default {};
// Define default payloads
public Class<? extends Payload>[] payload() default {};
}
下面是ConstraintValidator实现:
package my.package.springdemo.mvc.validation;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class CourseCodeConstraintValidator implements ConstraintValidator<CourseCode, String> {
private String coursePrefix;
@Override
public void initialize(CourseCode theCourseCode) {
coursePrefix = theCourseCode.value();
}
@Override
public boolean isValid(String theCode, ConstraintValidatorContext theConstraintValidatorContext) {
boolean result;
if (theCode != null) {
result = theCode.startsWith(coursePrefix);
}
else {
result = true;
}
return result;
}
}
谢谢你的回答和时间,但我知道注释是java的东西。我的问题的重点是如何使用注释实现方法代理。很抱歉误解了这个问题。这有帮助吗?前一个依赖于Spring AOP。如果需要Spring AOP独立注释,那么AspectJ就是前进的方向。这里有一个例子:我将看看它们。感谢您的关注:还有一个来自Spring4文档的Spring+AspectJ:令人惊讶的是,我没有在Spring5中找到参考!