- @Stateless
- public class UserManageImpl implements UserManage {
- @AroundInvoke //类内部拦截器1
- public Object myInterceptor1(InvocationContext ic) throws Exception
- {
- System.out.println("myInterceptor-----------1-------------:" + ic.getMethod().getName());
- return ic.proceed();
- }
- @AroundInvoke //类内部拦截器2
- public Object myInterceptor2(InvocationContext ic) throws Exception
- {
- System.out.println("myInterceptor-----------2-------------:" + ic.getMethod().getName());
- return ic.proceed();
- }
- @Override
- public String sayHello(String userName) {
- // TODO Auto-generated method stub
- return "hello!@"+userName;
- }
- @Override
- public String greet(User user) {
- // TODO Auto-generated method stub
- return "greet!@"+user.getName();
- }
- @Override
- public User getUser() {
- // TODO Auto-generated method stub
- User user=new User();
- user.setName("贾琳");
- return user;
- }
- }
Stateless Session Bean中定义了两个拦截器方法和三个普通的bean方法,分别是myInterceptor1和myInterceptor2。当客户端调用sayHello,greet,getUser方法时,EJB容器会先调用myInterceptor1,然后会调用myInterceptor2方法,最后会调用Bean方法。使用拦截器方法时要注意如下几点:
1. 拦截器方法必须有一个返回值,返回值类型是Object。
2. 拦截器方法只能有一个参数,而且该参数类型必须是javax.interceptor.InvocationContext。
3. 只有调用InvocationContext接口的proceed方法,EJB容器才会调用下一个拦截器方法或被拦截的Bean方法。
- //拦截器1
- public class UserInterceptor1 {
- @AroundInvoke
- public Object interceptorMethod(InvocationContext ic) throws Exception {
- System.out.println("UserInterceptor-----------1-------------:" + ic.getMethod().getName());
- return ic.proceed();
- }
- }
- //拦截器2
- public class UserInterceptor2 {
- @AroundInvoke
- public Object interceptorMethod(InvocationContext ic) throws Exception {
- System.out.println("UserInterceptor-----------2-------------:" + ic.getMethod().getName());
- return ic.proceed();
- }
- }
- @Stateless
- @Interceptors({UserInterceptor1.class, UserInterceptor2.class}) //多个外部拦截器类
- //@Interceptors(UserInterceptor1.class) // 一个外部拦截器
- public class UserManageImpl implements UserManage {
- @AroundInvoke //类内部拦截器1
- public Object myInterceptor1(InvocationContext ic) throws Exception
- {
- System.out.println("myInterceptor-----------1-------------:" + ic.getMethod().getName());
- return ic.proceed();
- }
- @AroundInvoke //类内部拦截器2
- public Object myInterceptor2(InvocationContext ic) throws Exception
- {
- System.out.println("myInterceptor-----------2-------------:" + ic.getMethod().getName());
- return ic.proceed();
- }
- @ExcludeClassInterceptors //阻止拦截器类中的拦截器方法对Bean方法的拦截
- @Override
- public String sayHello(String userName) {
- // TODO Auto-generated method stub
- return "hello!@"+userName;
- }
- @Override
- public String greet(User user) {
- // TODO Auto-generated method stub
- return "greet!@"+user.getName();
- }
- @Override
- public User getUser() {
- // TODO Auto-generated method stub
- User user=new User();
- user.setName("贾琳");
- return user;
- }
- }
5万+



被折叠的 条评论
为什么被折叠?



