Spring Framework 5.0:@Controller、@Service、@Repository

本文介绍了Spring框架中Bean的注解配置方式,包括使用@Configuration、@Bean等注解定义配置类,以及@Service、@Controller、@Repository和@Component注解的作用。并通过具体案例展示了如何使用这些注解进行数据库连接池和业务逻辑层的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回顾

http://blog.youkuaiyun.com/github_26672553/article/details/78214223
http://blog.youkuaiyun.com/github_26672553/article/details/78793707
1、我们了解了什么是“注解”
2、通过注解的方式可以非常方便的加载组件Bean
3、使用包扫描的方式加载Bean


@Configuration  // 表明这是一个配置类
public class MyConfig {
    /**
     * 用户登录验证配置方法
     * @return 返回这个验证条件配置对象
     */
    @Bean
    public UserValidateConfig userValidateConfig1(){
        // 设置好验证条件:用户名长度8、QQ必填
        UserValidateConfig userValidateConfig = new UserValidateConfig(){
            {
                setUserNameLength(8);
                setQQRequired(true);
            }
        };

        return userValidateConfig;
    }

    @Bean
    @Qualifier("us1")
    public UserService myUserService(){
        UserService userService = new UserService();
        userService.setUserValidateConfig(this.userValidateConfig1());
        return userService;
    }

    @Bean
    @Qualifier("us2")
    public UserService myUS(){
        UserService userService = new UserService();
        userService.setUserValidateConfig(this.userValidateConfig1());
        return userService;
    }

    @Bean
    public NewsService myNewsService(){
        return new NewsService();
    }
}

回过头来想想:难道为了配合IoC容器,我们把所有需要用到的Bean都在这里配置?
那岂不是要写好多@Bean ?而且有的类没有什么太负载的对象依赖,我们仅仅是想在IoC容器中统一使用而已。

我们有必要学几个新注解

下面4个注解都可以标注Bean,官方文档告诉我们未来将会对它们进行扩展,但也给出了基本函数:

@Service 用于标注业务层组件
@Controller 用于标注控制层组件(MVC常用)
@Repository 用于标注数据访问组件
@Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注

案列:获取用户虚拟币

1、请复习数据库连接池和JOOQ这个ORM框架知识
http://blog.youkuaiyun.com/github_26672553/article/details/78190246
http://blog.youkuaiyun.com/github_26672553/article/details/78191576

我们现在使用注解来改造一下,新建文件UserConfig.java,代码如下:

package SpringLean.Users;


import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.sql.Connection;
import java.sql.SQLException;

@Configuration
public class UserConfig {

    @Bean
    public PoolProperties poolProperties(){
        return new PoolProperties(){
            {
                setUrl("jdbc:mysql://127.0.0.1/test?characterEncoding=UTF-8");
                setUsername("root");
                setPassword("root");
                setDriverClassName("com.mysql.jdbc.Driver");

                setMinIdle(5); //始终保留的连接的最小连接数,默认10
                setMinIdle(10); //设置池内最大空闲连接数
                setInitialSize(5); //启动时初始连接数 默认10
                setMaxActive(20); //最大活跃连接数
                setTestOnBorrow(true); //取出连接时是否对其进行验证
                setValidationQuery("select 1"); //如果上面设置为true,则这里要设置
            }
        };
    }

    @Bean
    public  Connection getConnection() throws SQLException {
        DataSource dataSource = new DataSource();
        dataSource.setPoolProperties(this.poolProperties());
        Connection connection = dataSource.getConnection();

        return connection;
    }

    @Bean
    public DSLContext dslContext() throws SQLException {
        return DSL.using(this.getConnection(), SQLDialect.MYSQL);
    }
}

2、我们的案列是为了学习前面说到的那几个新的注解,所以处于学习目的,我们设计一下简单的结构:

入口函数:初始化IoC容器,加载Bean
UserController:用于最终如何展现用户信息(虚拟币)
UserService:用于获取用户信息的业务逻辑
UserRepository:数据库增删改查

需要特殊说明的是:这样分开是一种良好的规范模式,并不是说非要这样做。

UserController.java文件:

package SpringLean.Users;

import org.springframework.stereotype.Controller;

@Controller
public class UserController {

}

UserService.java文件:

package SpringLean.Users;

import org.springframework.stereotype.Service;

@Service
public class UserService {
}

UserRepository.java文件:

package SpringLean.Users;

import org.springframework.stereotype.Repository;

@Repository
public class UserRepository {

}

你已经看出来的,就是给类打上不同的注解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值