持之以恒 -- 自律
今天 , 我们来讲讲 Spring( 第二讲 ) , 上一讲 我们已经说过了 xml 配置了 , 这一讲 我们来谈谈 注解配置 .
hey ! ! ! WHY ? why 要基于注解配置使用 IOC .
答 : 是的 , xml 配置 固然直观形象 , 更容易理解 , 但是 随着项目渐渐变大 , 这样的话 , 配置会比较繁琐 , 那么 , 注解配置可以来解决这个问题 , 简化代码 , 提高开发效率 !
IOC 注解 (3+1)
3+1 IOC 注解
@Repository -->>>用于标注数据访问组件,即 DAO 实现类上。 例 : StudentDAOImpl
@Service -->>>用于标注业务层实现类上。 例 : StudentServiceImpl
@Controller -->>>用于标注控制层类上(如 SpringMVC 的 Controller)。
@Component -->>>当不是以上的话,可以使用这个注解进行标注
以上注解都是可以贴对应类上的,完成创建对象功能,但注意在 spring 配置文件中配置
<context:component-scan base-package="使用上面注解类所在包"/>
<!-- 配置注解的第三方程序 解析 IoC 注解 DI 注解,让这些注解起作用-->
DI 注解
@Autowired 和 @Resource 取代注入 bean (看 公司需求 )
@Value 取代注入常量值
DI 注解 和 xml 配置 :
DI 注解 是可以直接 贴注入在 字段上的 , 所以可以 不用 提供 set方法 .
而 xml 配置 是通过 属性 注入 , 所以需要提供 set 方法 .
注意事项 : lombok的 set 方法 , 只是生产 set 方法 ,没有 注入的作用哦 , 别自作聪明 ! DI 注解才有 注入作用 .
注解 : Scope和PostConstruct 以及PreDestroy
@Scope:贴在类上,标明 bean 的作用域。
@PostConstruct:贴在方法上,标明 bean 创建完后调用此方法。
@PreDestroy:贴在方法上,标明容器销毁时调用此方法。
@scope默认是单例模式(singleton)
如果需要设置的话@scope("prototype")
1.singleton单例模式,
全局有且仅有一个实例
2.prototype原型模式,
每次获取Bean的时候会有一个新的实例
3.request
request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,配置实例:
request、session、global session使用的时候首先要在初始化web的web.xml中做如下配置:
如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可:
4.session
session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
5.global session
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。
但是一般常见的话一般会使用上面1和2两种
接下来 , 我们通过昨天的 例子 使用注解 进行 改进 !
练习 -- > > 使用注解配置模拟用户注册
public interface IStudentDao {
//需求 : 用户注册 保存 用户名 和 密码
void save(String username, String password) throws SQLException;
}
@Repository
public class StudentDAOImpl implements IStudentDao {
@Autowired
private DataSource dataSource;
/*提供 set 方法
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}*/
@Override
public void save(String username, String password) throws SQLException {
//获取 连接池对象 口诀 加 连 预 执 释
@Cleanup
Connection connection = dataSource.getConnection();
@Cleanup
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO student (username , password) VALUES (?,?)");
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
preparedStatement.executeUpdate();
}
}
public interface StudentService {
void register(String username, String password) throws SQLException;
}
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentDAOImpl dao;
@Override
public void register(String username, String password) throws SQLException {
dao.save(username, password);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<---*****************************************************************************-->
<!--关联db.properties-->
<context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<context:component-scan base-package="cn"></context:component-scan>
<!-- 配置注解的第三方程序 解析 IoC 注解 DI 注解,让这些注解起作用-->
<---*******************************************************************************-->
<!--注释掉的 ::<bean id="studentDAO" class="cn.wolfcode.dao.impl.StudentDAOImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="studentService" class="cn.wolfcode.service.impl.StudentServiceImpl">
<property name="dao" ref="studentDAO"></property>
</bean>-->
</beans>
网友评论