0

我不确定我是否可以在一篇文章中提出多个问题,但在这里,

例如,我有以下内容,

控制器

@Controller
public class FooController{

    @Autowired
    private FooService fooService;

    @RequestMapping(value="/foo", method=RequestMethod.POST)
    public @ResponseBody foo(@RequestBody FooRequest request){
    }

}
@Controller
public class BarController{

    @Autowired
    private FooService fooService;

    @RequestMapping(value="/bar", method=RequestMethod.POST)
    public @ResponseBody bar(@RequestBody FooRequest request){
    }

}

服务

public class FooService{

    private Foo foo;

    public Foo getFoo() {
        return foo;
    }
    public void setFoo(Foo foo) {
        this.foo = foo;
    }
    public String doFoo(String str){
        return foo.doFoo(str);
    }
}

上课做作业

public class Foo{

    public String doFoo(String str){
        return (str + " is foo");
    }
}

使用依赖注入创建 bean

<context:annotation-config/>

<bean id="fooService" class="com.myapp.service.FooService">
    <property name="foo" ref="foo"></property>
</bean> 
<bean id="foo" class="com.myapp.foo.Foo">
</bean>

我的问题是:

  1. 我没有@service在课堂上使用注释FooService,我应该使用它,为什么
  2. 这个配置是否是线程安全的,为什么(如果它是线程安全的,它是如何实现的)?
  3. 我在哪里可以找到有关 Spring 设计中使用的层(dao 层、服务层......)的教程以及这种设计的目的?
4

3 回答 3

4
  1. 如果您在 xml-config 中声明您的 bean,则不必像您所做的那样使用注释。
  2. 这是。每个 bean,虽然是单例,但都是无状态的。因此不会发生并发修改。
  3. 例如在维基百科中。它不是特定于弹簧的。查找有关三层架构的文章
于 2012-07-20T08:31:28.853 回答
1
  1. 使用它只会避免使用 XML 声明 bean 的需要。您选择为其他 bean 使用注释。因此,我也会为此使用注释。
  2. 是的,是的,因为 Spring 确保在服务任何请求之前,使用同步屏障正确连接和初始化所有内容
  3. 这是一个非常广泛的问题。分层对于关注点分离、可测试性、以声明方式划分事务的能力等很有用。
于 2012-07-20T08:33:07.430 回答
1
  1. @Repository、@Service 或 @Controller(@Components 的子注释)用于标记特定的类,因此它们或多或少可以被视为元数据。但是,Spring 框架的一些特性可以利用这些特性。其中之一是自动组件扫描(将在给定的 java 包中搜索具有上述注释的类,这些类可以用作 Spring bean,就好像它们是在 XML 中声明的一样)。要启用此功能,您应该将其放入您的 spring 上下文中:

    <context:component-scan base-package="my.service.package"/>

    更多信息可以在这里找到:http ://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-classpath-scanning

    另一个用例是 AOP。您可以创建注释感知切入​​点,您可以通过这些切入点选择所有存储库类。

  2. 上下文中的 Spring bean 是一一提出的,因此没有机会启动并发。但是,bean 之间可能存在循环依赖关系,Spring 可能会或可能不会正确解决这个问题。

  3. 对于 DAO 和服务的东西,当前的 Spring 3 文档提供了许多示例,并且可能是最好的学习资源:http ://static.springsource.org/spring/docs/3.0.x/reference/index.html如果你愿意想要全面了解我建议尝试使用 Hibernate 的 JdbcTemplate、Rowmappers 和基于 ORM 的配置。

于 2012-07-20T08:50:51.647 回答