开发者社区> 问答> 正文

有关于 spring 管理hibernate实体问题

也总是用Spring+HIbernate.但实际上没有去跟代码。

现在我就想知道如何得到Hibernate所有实体对象,但不知道Spring哪个类管理 了。实际看了下是这个类加载的:

LocalSessionFactoryBean,,但跟下去没东西了。

之前也有过一个想法,,想得到Spring3 所有管理的Controller对象。但也是没有找到是哪个类》其实我也没有仔细找。。

展开
收起
爵霸 2016-03-04 13:50:04 2509 0
1 条回答
写回答
取消 提交回答
  • Hibernate 把实体bean的相关信息,抽象成一个元数据概念,具体的接口是org.hibernate.metadata.ClassMetadata,它提供了一系列的方法,比如获取Entity 名字,Class Type,Property等等,具体的大家看一下API就明白了

    这个接口通过Hibernate的顶级接口SessionFactory获取,比如,通过SessionFactory#getAllClassMetadata()方法就能获取到所有的实体Bean信息了。

    SpringMVC 也有类似的设计。

    首先是将请求的映射关系封装成了一个叫做 org.springframework.web.servlet.mvc.method.RequestMappingInfo 的对象,这个对象包含了一系列的映射匹配条件,待接受到请求后,通过此对象和请求进行比较,比如请求参数类型名字是否匹配,URL参数是否匹配等等。

    然后是将请求具体的处理方法封装成了一个叫做org.springframework.web.method.HandlerMethod的对象,也就是我们的 Controller 对象中处理请求的方法,这个对象同样也包含很多处理方法相关的信息。

    比如:
    `
    HandlerMethod#getBean() // 获取处理方法的Controller对象的实例
    HandlerMethod#getBeanType()// 获取 Controller 的类型
    HandlerMethod#getMethod() // 获取处理的方法反射 Method 对象
    HandlerMethod#getMethodParameters() // 获取处理方法的参数数组
    HandlerMethod#getReturnType() // 获取处理方法的返回值类型
    `

    上述2个元数据对象,会在SpringMVC启动的时候初始化好,缓存起来后作为后续请求分发的基础,并且包装到org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping 对象中。
    通过
    RequestMappingHandlerMapping#getHandlerMethods() 即可以获取一个 URL映射描述(RequestMappingInfo)作为Key,具体请求处理的方法(HandlerMethod)的Map对象,每一次的请求,Spring也是通过迭代这个Map,获取到与请求匹配的HandlerMethod来进行处理的,通过这个方法就能获取到所有处理方法的信息。

    另外,如果你只是想简单的拿到所有的Controller对象,那么只要获取到指定的Annotation为Controller对象的类即可了。

    通过Spring上下文提供的ApplicationContext#getBeanNamesForAnnotation(Controller.class)方法,获取到一个数组包含了Spring容器中,所有标识了Controller注解的Bean的名字。

    或者直接通过Application#getBeansWithAnnotation(Controller.class)方法,获取一个Map对象,key为BeanName,value为Bean的实例。

    2019-07-17 18:52:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多