码迷,mamicode.com
首页 > 编程语言 > 详细

spring容器启动之我见(四)

时间:2015-06-03 11:56:59      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

1.我们经常会发现在我们的service中有注解而在dao上没有注解

看图

技术分享


技术分享

因为我们在spring容器初始化bean的时候,是把service当做一个bean ,而dao并不是一个bean,这是个人理解,如果有错误,欢迎大家指出。

2. 那我们总结一下那些算是spring 的bean吧。

直接看下面   在类的上面 添加了如下四个注解的我们都看作是spring的bean.

@Component、@Repository @Service、@Controller

  看字面含义,很容易却别出其中三个:

  @Controller 控制层,就是我们的action层

  @Service 业务逻辑层,就是我们的service或者manager层

  @Repository 持久层,就是我们常说的DAO层

  而@Component (字面意思就是组件),它在你确定不了事哪一个层的时候使用。

  其实,这四个注解的效果都是一样的,Spring都会把它们当做需要注入的Bean加载在上下文中;

  但是在项目中,却建议你严格按照除Componen的其余三个注解的含义使用在项目中。这对分层结构的web架构很有好处!!

  示例:

  1. 控制层

  @Controller // 注释为controller

  @RequestMapping("/login")

  public class LoginAction {

  @Autowired

  @Qualifier("userService") //注释指定注入 Bean

  private IUserService userService;

  。。。。。。 其他略 。。。。。。

  }

  2. 业务逻辑层

  @Service("userService")

  public class UserServiceImpl implements IUserService {

  @Autowired

  @Qualifier("userDao")

  private IUserDao userDao;

  。。。。。。 其他略 。。。。。。

  }

  3. 持久层

  @Repository("userDao")

  public class UserDaoImpl implements IUserDao {

  private static Logger logger = LoggerFactory.getLogger(UserDaoImpl.class);

  private DataSource dataSource;

  private JdbcTemplate template;

  @Autowired

  public UserDaoImpl(DataSource dataSource){

  this.dataSource= dataSource;

  template = new JdbcTemplate(this.dataSource);

  }


3.问题来了。像我们的springmvc框架。在持久层的 Dao它是没有实现类的。因为我们写的dao直接继承CrudRepository<xx, xx> 

这时候我们写的dao算不算bean呢。。本人实验过

import org.springframework.beans.factory.BeanFactory;

在controller中测试的。

@Autowired
private BeanFactory beanfactory;

我这里的。BmWorkDAO 就是继承CrudRepository<xx, xx>  没有实现类,因为继承CrudRepository<xx, xx>也是不需要实现类的。稍微啰嗦一点。

String ss = "org.szgzw.ent.compare.bmwork.BmWorkDAO";
BmWorkDAO bb = (BmWorkDAO)beanfactory.getBean(Class.forName(ss));

System.out.println(bb.getClass().getName());

反正没有报错,具体这里的BmWorkDAO 算不算bean,本人也不是很懂,既然不报错,本人认为还是算是spring容器的bean。


4.我们对第3点做一点补充说明吧。

我们看到我们在controller中注入了。

@Autowired
private BeanFactory beanfactory;

我们直接是注入bean工厂然后去获取到bean .中方式使用场景是,容器处于启动中即tomcat处于启动中。注意这种获取bean的方式吧。




spring容器启动之我见(四)

标签:

原文地址:http://blog.csdn.net/baicp3/article/details/46341975

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!