Spring

Spring(第二讲之注解)

2020-06-01  本文已影响0人  superNeil

持之以恒 -- 自律

​ 今天 , 我们来讲讲 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>
上一篇 下一篇

猜你喜欢

热点阅读