`

类似Spring Controller 注解Demo

 
阅读更多
花点时间弄的一个url和方法映射的小Demo,先记录在此,便于后面使用。
Note:使用场景:Mina,Netty的Client->Server请求映射关系。 后期有时间再加上一个类级的映射,以达到模块划分之间的划分更清晰。

1、Mapper 映射关系的Annotation类。
package com.runant.demo;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;

/**
 * @author ping
 *
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Mapper {
	String value() default "";
}


2、UserService 这里用于测试的案例业务类。
package com.runant.demo;
/**
 * @author ping
 * 
 */
@Mapper(value = "/user")
public class UserService {

    @Mapper(value = "/getUser")
    public String getUser(String userName) {
        return "Hello...." + userName;
    }

    @Mapper(value = "/login")
    public boolean login(String userName, String password) {
        System.out.println("Login user-name:" + userName + ",password:" + password);
        return "admin".equals(userName) && "123456".equals(password);
    }

    public boolean delete(String userName) {
        System.out.println("Delete user-name:" + userName);
        return true;
    }
}


3、Test 用于测试的类。
package com.runant.demo;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

/**
 * @author ping
 * 
 */
public class Test {

	/**
	 * @param args
	 * @throws InvocationTargetException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */
	public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
//		String url = "/user/getUser";
		String url = "/user/login";
		String params = "Test ,Hahahha~!~";
		
		 Map<String, Invoker> urlMapping = new HashMap<String, Invoker>();
        UserService service = new UserService();
        Mapper topMapper = service.getClass().getAnnotation(Mapper.class);
        String topUrl = topMapper != null ? topMapper.value() : "";
        Method[] methods = service.getClass().getDeclaredMethods();
        for (Method m : methods) {
            Mapper subMapper = (Mapper) m.getAnnotation(Mapper.class);
            if (subMapper != null) {
                urlMapping.put(topUrl + subMapper.value(), new Invoker(service, m));
            }
        }
		Invoker invoker = urlMapping.get(url);
//		Object result = invoker.execute(params);
		Object result = invoker.execute("Leo","123");
		System.out.println(result);
		result = invoker.execute("admin","123456");
		System.out.println(result);
		
	}

	private static class Invoker {
		private Method method;
		private Object obj;

		public Invoker(Object obj, Method method) {
			this.obj = obj;
			this.method = method;
		}

		public Object execute(Object... args){
			try {
				return this.method.invoke(obj, args);
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
			return null;
		}
	}
}
分享到:
评论

相关推荐

    Spring demo 自动检测注解

    7. **组件扫描**:Spring的`@Component`、`@Service`、`@Repository`和`@Controller`等注解用于标记组件类,配合`@ComponentScan`可以自动检测并注册这些类到IoC容器,从而实现bean的自动创建和依赖注入。...

    Spring mvc 注解Demo

    在本"Spring MVC注解Demo"中,我们将深入探讨如何利用注解简化Spring MVC的配置和控制器的实现,使其更适合初学者快速上手。 在Spring MVC中,注解的使用大大减少了XML配置,使得代码更加简洁且易于理解。以下是...

    spring4.0框架demo

    《Spring 4.0框架深度探索:基于Maven构建的实战Demo》 Spring框架作为Java企业级应用开发的基石,自推出以来就以其强大的功能和灵活性赢得了广大开发者的心。Spring 4.0作为其一个重要版本,引入了许多改进和新...

    springmvc spring hibernate整合Demo

    这个"springmvc spring hibernate整合Demo"旨在帮助初学者理解如何将这三个框架协同工作,实现一个完整的CRUD(创建、读取、更新、删除)应用。 Spring MVC 是 Spring 框架的一部分,专门用于构建Web应用程序。它...

    Spring mvc portlet demo

    1. **Controller** - 控制器负责处理来自portlet的请求,通常通过实现`PortletController`接口或使用`@Controller`注解的类。在Spring 3.0中,你可以使用`@RequestMapping`注解来映射HTTP请求。 2. **Model** - ...

    Spring 注解 方式配制的小demo

    首先,我们来看标题"Spring 注解 方式配制的小demo",这意味着我们将学习如何创建一个简单的Spring应用,该应用完全基于注解进行配置。在传统的Spring配置中,我们需要在XML文件中定义bean及其属性,但使用注解配置...

    springwebflux的demo

    在`Controller.java`中,我们可能会看到`@RestController`注解的类,以及使用`@RequestMapping`或`@GetMapping`等注解的方法。这些方法将处理HTTP请求,并返回反应式类型如`Mono`或`Flux`,它们是Reactor库提供的...

    spring3实例Demo

    在实例Demo中,你可能看到Spring MVC的配置,包括DispatcherServlet、Controller、ModelAndView等组件的使用,以及视图解析器的设置,如JSP或Thymeleaf。 总的来说,Spring3实例Demo是一个全面展示Spring框架功能的...

    Spring Data JPA Demo

    在这个“Spring Data JPA Demo”项目中,我们将深入探讨如何利用Spring Data JPA 实现高效、简洁的数据访问。 1. **Spring Data JPA 概述** Spring Data JPA 提供了一种声明式的方式,通过Repository 接口来操作...

    Spring MVC使用Demo

    这个"Spring MVC使用Demo"提供了实践操作,帮助开发者深入理解Spring MVC的开发环境配置、注解的使用以及工作原理。 首先,Spring MVC的设计模式基于Model-View-Controller(MVC),它将应用程序的业务逻辑、数据和...

    Spring Security3 Demo

    2. **控制器 (Controller)**: 应用中的控制器可能会使用`@Secured`等注解来限制访问,例如只允许特定角色的用户访问某些方法。 3. **安全配置**: 可能包含自定义的`UserDetailsService`来从数据库或其他数据源加载...

    Spring MVC REST Demo

    "Spring MVC REST Demo"是一个示例项目,旨在展示如何在Spring MVC框架中实现RESTful Web服务。下面将详细讨论Spring MVC与RESTful API的结合,以及如何创建和测试此类服务。 首先,Spring MVC是Spring框架的一部分...

    极简Spring框架搭建demo

    本篇将基于"极简Spring框架搭建demo"来深入讲解如何从零开始构建一个简单的Spring应用。 首先,我们需要在项目中引入Spring的核心库。这通常通过Maven或Gradle等构建工具来完成。在Maven的pom.xml文件中,我们可以...

    spring深入学习demo

    4. **MVC框架**:Spring MVC是Spring为Web应用提供的Model-View-Controller模式实现,具有松耦合、可测试和高效的特点。它可以方便地整合视图技术,如JSP、Thymeleaf等。 5. **Spring Boot**:随着微服务的流行,...

    spring+websocketdemo

    2. **WebSocket消息处理**:创建一个控制器类,使用`@Controller`和`@MessageMapping`注解,定义处理WebSocket消息的方法。例如,`@MessageMapping("/send")`可以用来处理发送到`/send`路径的消息。 3. **WebSocket...

    SpringIOC经典Demo

    例如,`@Component`、`@Service`、`@Repository`和`@Controller`注解用于标记组件,`@Autowired`、`@Resource`用于注入依赖。 8. **Profile**:Spring支持配置文件的Profile特性,可以根据不同的环境(如开发、测试...

    spring websocket完整Demo

    **Spring WebSocket 完整Demo详解** WebSocket是一种在客户端与服务器之间建立长连接的协议,它提供了双向通信的能力,使得服务器可以主动向客户端推送数据。在Web应用中,Spring框架提供了对WebSocket的支持,使得...

    spring完整demo实例

    在Spring MVC的示例中,你可能会看到Controller类的定义、视图解析、以及如何使用ModelAndView对象传递数据到视图层。 对于测试,Spring提供了TestContext框架,它支持单元测试和集成测试。你可以看到如何使用JUnit...

    基于注解的Spring MVC小demo

    **基于注解的Spring MVC小demo** 在Java Web开发领域,Spring MVC框架因其强大的功能和灵活性而被广泛应用。本demo展示了如何使用注解驱动的方式来构建一个简单的Spring MVC应用程序。注解使得代码更加简洁,减少了...

Global site tag (gtag.js) - Google Analytics