前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈Spring装载Bean的几种方式

浅谈Spring装载Bean的几种方式

作者头像
东边的大西瓜
发布2022-05-05 11:42:45
5060
发布2022-05-05 11:42:45
举报
文章被收录于专栏:吃着西瓜学Java

浅谈Spring装载Bean的几种方式

装载Bean的几种注解

注解

使用位置

@Configuration

类,搭配@Bean标注方法体

@Repository

@Component

@Service

@Controller

@Configuration+@Bean

@Configuration:配置,声明为Spring的配置类。早期的Spring是通过xml来配置Bean的,在Spring3时引入了@Configuration来代替xml进行配置Bean,相当于xml中的<Beans></Beans>。这是一个很重要的引进,毕竟我们是搞java的,写起Java来还是要比写xml舒服的多。 @Bean:此注解标注在方法上,用于表示方法的实例化、配置和初始化都是要交由Spring IOC管理的一个Bean ,相当于xml中的<Bean></Bean>。

示例:

1.声明一个User类:

代码语言:javascript
复制
 @Data
 public class User implements Serializable {
     private int id;
     private String name;
     public User(){}
     public User(int id,String name){
         this.id = id;
         this.name = name;
     }
 }

2.声明一个Bean:

代码语言:javascript
复制
 @Configuration
 public class UserConfig {
     @Bean
     public User user(){
         return new User(22,"zzxkj");
     }
 }

3.测试类:

代码语言:javascript
复制
 @SpringBootTest
 public class ConfigTest {
     @Autowired
     private User user;
     @Test
     public void test(){
         System.out.println(user.toString());
     }
 }

4.结果如下:

在上述例子中,UserConfig类上加入@Configuration注解,表明这是一个配置类,里面有一个@Bean注解的user()方法,表明这个方法是交由Spring管理的Bean。而且若未指定Bean的名称,则默认该Bean的名称为方法名,这里指代user。

@Repository

从Spring2.0开始,为了简化Spring的开发,陆续引进了一些注解,而@Repository注解就属于最早引入的一批。@Repository用于标注数据访问层,也就是我们学JDBC时所说的DAO层,并支持自动处理数据库操作产生的异常,支持数据库操作异常处理这是@Repository的特殊之处,源码中也做出了相应介绍。

上述源码的大致意思就是,@Repository支持自动处理数据库操作产生的异常(DataAccessException)。

示例:

代码语言:javascript
复制
 @Repository
 public class UserRepository{
     @Autowired
        //JdbcTemplate是Spring封装好的JDBC框架
     private JdbcTemplate jdbcTemplate;
     public Map<String, Object> findUserById(int id){
     String sql = "select *from users where id = ?";
         return jdbcTemplate.queryForMap(sql,id);
     }
 }

学过Mybatis的同学该说了,我好像在Dao层看到的是@Mapper注解啊,这里说明一下@Mapper是Mybatis的注解,而@Response是Spring的注解.

而且在idea中如果单单只使用@Mapper注解的话,我们在使 用Bean的时候是会飘红的,如下图所示:

提示,找不到该类型的Bean:

其实这里飘红的原因就是我上面所说的@Mapper是Mybatis的注解,该组件虽然被声明为Bean,但是并未被扫描管理到,只有在使用时才会被Spring扫描并管理。也就是说这里虽然爆红,但是并不影响我们的使用,不过这里飘红终究看着不舒服,解决方法有两种。

第一种:告诉Spring这个Bean不是必须存在的

第二种:在Dao层添加@Repository注解,声明为Spring管理的Bean

不过从Spring2.5开始,又引进了@Component,@Service,@Controller,而@Repository也添加上了我们即将要说的@Component注解。@Component是一个通用的Spring容器管理的单例bean组件,上述几个注解几乎都可以看到@Component的身影。 而@Repository, @Service, @Controller就是针对不同的使用场景所采取的特定功能化的注解组件。

@Component

@Component是一个通用注解,表明这个类会作为一个组件类,并告知Spring为这个类创建Bean。

示例:

测试类:

结果:

@Service

注解声明为业务处理(服务)类,注意DAO层和Service层的区别,DAO层面向sql表,Service层面向业务。可以简单的理解为Service是对DAO的再次封装,并对外提供相应的服务接口。

示例:

上述代码中的UserRepository,就是对应的DAO。

@Controller

声明此类是一个SpringMVC Controller对象,也就是控制器。

示例:

这里会返回一个由模板引擎解析过的index视图,这里我使用的是Thymeleaf,默认的模板解析路径地址在resources>templates,当然可以自定义合适的地址。

返回的视图:

continue

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吃着西瓜学Java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 浅谈Spring装载Bean的几种方式
    • 装载Bean的几种注解
      • @Configuration+@Bean
        • @Repository
          • @Component
            • @Service
              • @Controller
              相关产品与服务
              对象存储
              对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档