GVKun编程网logo

在Spring 3中为组件扫描组织类的聪明方法是什么?(spring组件扫描原理)

24

在本文中,您将会了解到关于在Spring3中为组件扫描组织类的聪明方法是什么?的新资讯,同时我们还将为您解释spring组件扫描原理的相关在本文中,我们将带你探索在Spring3中为组件扫描组织类的聪

在本文中,您将会了解到关于在Spring 3中为组件扫描组织类的聪明方法是什么?的新资讯,同时我们还将为您解释spring组件扫描原理的相关在本文中,我们将带你探索在Spring 3中为组件扫描组织类的聪明方法是什么?的奥秘,分析spring组件扫描原理的特点,并给出一些关于java – Spring启动组件扫描包含单个类、java – 仅在Spring中如何通过注释配置组件扫描?、java – 在Spring 3中组织类进行组件扫描的智能方法是什么?、java – 在Spring-Hibernate项目中初始化实体集合(POJO)的正确方法是什么?的实用技巧。

本文目录一览:

在Spring 3中为组件扫描组织类的聪明方法是什么?(spring组件扫描原理)

在Spring 3中为组件扫描组织类的聪明方法是什么?(spring组件扫描原理)

我已经开始使用Spring 3进行新项目,并且正在使用注释。我喜欢我可以连接我的类以注入依赖项,但是我知道context:component-scan从基本包开始是一个不好的做法。

我正在使用一个DispatcherServlet具有自己的xml配置文件的文件。在那也是context:component-scan。刚开始学习Spring时,我在组件扫描中重叠了,看到多次创建bean。我想避免这种情况。

什么是组织我的程序包或组件扫描以覆盖所有bean而不重复的好方法?

目前,我有这样的软件包:

my.package.controllermy.package.daomy.package.entitymy.package.servicemy.package.util

如果我在所有这些程序包中都包含bean,那么似乎最简单的方法就是将它放入<context:component-scan base-package="my.package"></context:component-scan>applicationContext.xml中并完成它。

扫描my.package.controller分发程序的xml和applicationContext.xml中的其余文件(不包括my.package.controller)会更好吗?

还是应该将所有带注释的课程安排在一个区域中,而将其他所有内容安排在另一个区域中?就像是:

my.package.spring.controllermy.package.spring.daomy.package.spring.entitymy.package.spring.servicemy.package.spring.utilmy.package.notannotatedmy.package.notannotated2

我正在使用@Autowired向大多数(如果不是全部)类中添加日志记录,因此我不知道会有任何不会被注释的类。

我讨厌卡在配置中…我宁愿卡在代码中,所以如果有人可以提供任何提示,我将随时欢迎他们。

谢谢!

答案1

小编典典

是的-在您的主要环境中,扫描除控制器外的所有物体

 <context:component-scan base-package="my.package">    <context:exclude-filter type="regex" expression="my\.package\.controller.*"/> </context:component-scan>

在您的DispatcherServlet上下文中,只需扫描控制器包即可。

java – Spring启动组件扫描包含单个类

java – Spring启动组件扫描包含单个类

参见英文答案 > Using @ComponentScan or                                     3个
我使用spring组件扫描来
自动检测bean:

@ComponentScan({"com.org.x,com.org.y"})

问题是我希望扫描com.org.x中的所有类,但我想要一个单独的类,com.org.y.someService.class,单独从com.org.y扫描.

我怎样才能做到这一点?

除了使用上下文扫描之外,我如何创建这个bean并注入应用程序上下文?

最佳答案
您应该使用在配置类中使用@Bean注释的方法来定义bean,如the documentation中所述.

java – 仅在Spring中如何通过注释配置组件扫描?

java – 仅在Spring中如何通过注释配置组件扫描?

我在tomcat webserver环境中运行一个war文件.

我有一个基于注释的配置为@Beans和一个xml配置为webservices:

@Configuration
//@ComponentScan(basePackageClasses = ...)
public class AppConfig {
    //beans @Bean
}

applicationContext.xml中:

<beans>
    <context:component-scan base-package="..."/>
    <jaxws:endpoint ... />
</bean>

问题:我想通过注释定义@ComponentScan来具有类型安全性.但是如果我这样做,则不执行扫描.相比之下,当我使用< context:component-scan ..一切正常. Spring组件扫描是否与Web服务器中的xml配置绑定在一起进行扫描?

解决方法

通过 http://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch06s02.html
就像是.
@Configuration
    @ComponentScan("com.company") // search the com.company package for @Component classes
    @ImportXml("classpath:com/company/data-access-config.xml")        
    public class Config {
    }

java – 在Spring 3中组织类进行组件扫描的智能方法是什么?

java – 在Spring 3中组织类进行组件扫描的智能方法是什么?

我已经开始使用 Spring 3开发一个新项目了,我正在使用注释.我喜欢我可以连接我的类来注入依赖项,但我知道上下文是一个不好的做法:组件扫描从基础包开始.

我正在使用dispatcherServlet,它有自己的xml配置文件.这也是一个上下文:组件扫描.当我第一次开始学习Spring时,我的组件扫描中有重叠,并且多次创建了bean.我想避免这种情况.

组织我的包或组件扫描以覆盖所有bean而不重复的好方法是什么?

目前我有这样的包:

my.package.controller
my.package.dao
my.package.entity
my.package.service
my.package.util

如果我在所有这些包中都有bean,那么似乎最简单的方法是放置< context:component-scan base-package =“my.package”>< / context:component-scan>进入applicationContext.xml并完成它.

扫描调度程序的xml中的my.package.controller和applicationContext.xml中的其余部分(不包括my.package.controller)会更好吗?

或者我应该将所有注释的课程安排在一个区域,还有其他一些安排在另一个区域?就像是:

my.package.spring.controller
my.package.spring.dao
my.package.spring.entity
my.package.spring.service
my.package.spring.util
my.package.notannotated
my.package.notannotated2

我正在使用@Autowired向大多数(如果不是全部)类添加日志记录,所以我不知道我将有任何不会被注释的类.

我讨厌陷入配置…我宁愿被困在代码中,所以如果有人可以提供任何提示,我会很乐意欢迎他们.

谢谢!

解决方法

是 – 在主要上下文中扫描除控制器之外的所有内容
<context:component-scan base-package="my.package">
    <context:exclude-filter type="regex" expression="my\.package\.controller.*"/>
 </context:component-scan>

在dispatcherServlet上下文中,只扫描控制器包.

java – 在Spring-Hibernate项目中初始化实体集合(POJO)的正确方法是什么?

java – 在Spring-Hibernate项目中初始化实体集合(POJO)的正确方法是什么?

我有一个POJO类,比如Foo,它有一组其他实体实例,比如说吧.
此类项目还有标准的misc类:Foo和Bar的服务和dao.

我希望BarService获得与某些Foo相关联的Bar实例集.现在我有以下代码,我相信它在概念上很糟糕.

public class Foo {
    Set<Bar> bars;

    public Set<Bar> getBars() {
        if (bars == null)
            return ( bars = new HashSet() );
        return bars;
    }
}
public class BarServiceImpl {
    public List<Bar> getlistofBars(Foo foo) {
        return new ArrayList(foo.getBars());
    }
}

3个问题:
在哪里初始化Foo的Set更好?
哪些特定的集合和列表更适合此类目的?
我目前的实施有哪些概念性问题,以及如何做得更好?

提前致谢.

解决方法

您的实体可以是带有getter和setter的简单字段集.您需要注意的是如何将对象与填充对象的方法联系起来.
ORM API提供了使用Objects而不是sql的自由.您应该在何时选择初始化Object的字段时要小心.例如,如果您有一个对象人员,其中包括姓名,年龄,联系人集合和访问过的城市.如果您对此人的姓名和年龄感兴趣而不是联系方式和城市,则应仅加载姓名和年龄.这意味着联系人和城市应该是懒惰的.
当您对联系感兴趣时,您只加载联系人而不是整个人物对象或通过人物对象.您可能只想使用Dao / Service加载一组联系人,并明确定义加载对象特定方面的方法(使用反向关联).
一些最好的休眠实践可以在 Best Practices找到.
更新:
1)实体不会自行填充.一种流行的方法是让DAO做这个Job.你的实体很简单
public class Foo {
    private Set<Bar> bar=new HashSet<Bar>();
    public Set<Bar> getBar {
        return bar;
    }
    public void setBar(Bar bar) {
        this.bar = bar;
    }
}

2)您可以在另一层(也称为服务层)中管理事务.

今天的关于在Spring 3中为组件扫描组织类的聪明方法是什么?spring组件扫描原理的分享已经结束,谢谢您的关注,如果想了解更多关于java – Spring启动组件扫描包含单个类、java – 仅在Spring中如何通过注释配置组件扫描?、java – 在Spring 3中组织类进行组件扫描的智能方法是什么?、java – 在Spring-Hibernate项目中初始化实体集合(POJO)的正确方法是什么?的相关知识,请在本站进行查询。

本文标签: