使用构造函数自动装配泛型类型 [Spring 4.2.5]

     2023-04-18     264

关键词:

【中文标题】使用构造函数自动装配泛型类型 [Spring 4.2.5]【英文标题】:Autowiring generic types with constructor [Spring 4.2.5] 【发布时间】:2016-08-17 03:11:57 【问题描述】:

我是 Spring 新手,正在尝试像本文 http://www.ibm.com/developerworks/library/j-genericdao/ 中那样实现 Generic DAO。我有几个实体 - ConcreteEntity1 和 ConcreteEntity2。还有,我有课

public interface GenericDao<T extends Serializable>  
    public T get(long id);
    public List<T> get(String hql);
    public void remove(T persistentObject);
    public void add(T entity);

@Repository("hibGenericDao")
public class HibGenericDaoImpl<T extends Serializable> implements GenericDao<T> 

    @Autowired
    private SessionFactory sessionFactory;

    private Class<T> type;

    public HibGenericDaoImpl(Class<T> type) 
        this.type = type;
    

    /** @inheritDoc */
    @Override
    public T get(long id) 
        T entity;
        try (Session session = sessionFactory.getCurrentSession()) 
            entity = session.get(type, id);
        
        return entity;
    

    /** @inheritDoc */
    @Override
    public List<T> get(String hql) 
        List<T> entityList;
        try (Session session = sessionFactory.getCurrentSession()) 
            Query query = session.createQuery(hql);
            entityList = query.list();
        
        return entityList;
    

    /** @inheritDoc */
    @Override
    public void remove(T persistentObject) 
        try (Session session = sessionFactory.getCurrentSession()) 
            session.delete(persistentObject);
        
    

    /** @inheritDoc */
    @Override
    public void add(T entity) 
        try (Session session = sessionFactory.getCurrentSession()) 
            session.saveOrUpdate(entity);
        
    

现在我正在尝试编写服务层,我想自动连接HibGenericDaoImpl&lt;ConcreteEntity1&gt;,其中字段type 包含ConcreteEntity1.class。你能说一下没有XML如何执行吗?

【问题讨论】:

【参考方案1】:

如果您已经在使用 spring,则可以使用 GenericTypeResolver 实用程序类,如此 SO 答案所示:How to get a class instance of generics type T

您应该能够执行以下操作:

 this.type = (Class<T>) GenericTypeResolver.resolveTypeArgument(getClass(), GenericDao.class);

【讨论】:

【参考方案2】:

用零参数构造函数替换你的构造函数。然后您可以使用this link 获得带有反射的T 类型。

【讨论】:

spring4-自动装配beans-通过构造函数参数的数据类型按属性自动装配bean

1.创建Maven项目,项目名称springdemo17,如图所示650)this.width=650;"src="https://s1.51cto.com/wyfs02/M01/8F/15/wKiom1jTN5mwr-2zAAAVZbvPl7I842.png-wh_500x0-wm_3-wmp_4-s_3468380499.png"title="QQ截图20170323104810.png"al 查看详情

spring(代码片段)

...自动装配Spring由构造函数自动装配SpringBeans自动装配可以使用·bean元素来声明bean和通过使用XML配置文件中的<constructor-arg> 查看详情

spring入门(代码片段)

...自动装配Spring由构造函数自动装配SpringBeans自动装配可以使用·bean元素来声明bean和通过使用XML配置文件中的<constructor-arg> 查看详情

Spring Boot 构造函数自动装配异常

】SpringBoot构造函数自动装配异常【英文标题】:SpringbootConstructorAutowiredException【发布时间】:2016-09-0403:49:51【问题描述】:我的springboot应用程序中有这些类(springhibernate/data/jpa/web):pkg实体:publicinterfaceBase//getter/settermethods@Map... 查看详情

如何在 Spring 中自动装配泛型类型 <T> 的 Bean?

】如何在Spring中自动装配泛型类型<T>的Bean?【英文标题】:HowtoAutowireBeanofgenerictype<T>inSpring?【发布时间】:2022-01-2408:02:45【问题描述】:我有一个beanItem&lt;T&gt;需要在@Configuration类中自动装配。@ConfigurationpublicclassA... 查看详情

spring3.2注释自动装配多个构造函数(代码片段)

Spring文档:每个类只能标记一个带注释的构造函数,但可以注释多个非必需的构造函数。如果我有一个自动装配的构造函数,一切都很好。如果我有两个或更多autowired,但required=false注释构造函数,一切都很好。但是如果我以某... 查看详情

spring学习-----spring使用@autowired注解自动装配

Spring使用@Autowired注解自动装配在上一篇Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配。在大多数情况下,你可能只需要在特定的 bean 自动装配属性。在Spring中,可以使用 @Auto... 查看详情

Spring-boot,无法自动装配类。未找到默认构造函数引发异常

】Spring-boot,无法自动装配类。未找到默认构造函数引发异常【英文标题】:Spring-boot,unabletoautowireaclass.NodefaultconstructorfoundExceptionisraised【发布时间】:2013-12-2422:41:46【问题描述】:我是弹簧靴的新手。在我将一个类移动到不同... 查看详情

如何在Spring bean中传递类构造函数参数由注释自动装配

】如何在Springbean中传递类构造函数参数由注释自动装配【英文标题】:HowtopassclassconstructorparametersinSpringbeanAutowiredbyannotations【发布时间】:2015-02-2000:19:24【问题描述】:没有IOC容器的正常方法是:newUser("Names",22);这里的参数值是... 查看详情

spring中@autowired和@resource的作用及区别

...而@Autowired是由spring提供,故减少系统对spring的依赖建议使用@Resource的方式;如果Maven项目是1.5的JRE则需换成更高版本的。2、@Resource和@Autowired都可以书写注解在字段或者该字段的setter方法之上3、@Autowired可以对成员变量、方法以... 查看详情

spring属性依赖注入

...配手动装配:一般进行配置信息都采用手动基于xml装配:构造方法、setter方法基于注解装配:自动装配:struts和spring整合可以自动装配byType:按类型装配byName:按名称装配constructor:构造装配,auto:不确定装配。 一.构造方... 查看详情

22自动装配-方法构造器位置的自动装配(代码片段)

...,Spring容器创建当前对象,就会调用方法,完成赋值方法使用的参数,自定义类型的值从IOC容器中获取@AutowiredpublicvoidsetCar(Carcar)this.car=car;22.2@Autowired标注在构造器默认加在IOC容器中的组件,容器启动会调用无参构造器创建对象... 查看详情

如何自动装配泛型类型[重复]

】如何自动装配泛型类型[重复]【英文标题】:Howtoautowiregenerictype[duplicate]【发布时间】:2016-05-2609:25:50【问题描述】:我想在FcSolrServiceImpl类中@autowireSolrCrudRepository,但它在NPE中提供。以下是我的实现。FcSolrServiceImpl.javapublicclass... 查看详情

15spring注解学习(自动装配)——@autowired标注在方法构造器和参数位置上

...Spring容器创建当前对象,就会调用方法,完成赋值;方法使用的参数,自定义类型的值从ioc容器中获取。配置类代码@Configuration@Import({Boss.class,Car.class})publicclassMainConifgOfAutowiredpublicclassBoss{@AutowiredpublicvoidsetCar 查看详情

<spring实战>3:最小化springxml配置

...Bean自动装配到Bean构造器的对应入参中autodetect:首先尝试使用constructor进行自 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.4.5自动装配

...动装配具有以下优点:自动装配可以显著减轻指定属性或构造参数的需求量;自动装配可以随着你对象的演化而更新配置。例如:如果你需要为一个类添加新的依赖,这个依赖可以自动满足而不需要你去修改配置文件。因 查看详情

spring之自动装配

...动装配模型下面是自动连接模式,可以用来指示Spring容器使用自动连接进行依赖注入。您可以使用元素的autowire属性为bean定义指定autowire模式。可以使用 byType 或者 constructor 自动装配模式来连接数组和其他类型的... 查看详情

spring---ioc自动装配和使用注解(代码片段)

...义目录标题自动装配说明byNamebyType(按类型自动匹配)使用注解@Autowired(类型)@Qualifier@Resource@Autowired与@Resource异同:使用注解开发自动装配说明自动装配是使用spring满足bean依赖的一种方法spring会在应用上下... 查看详情