回顾
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 {
}
你已经看出来的,就是给类打上不同的注解。