spring基础2

Spring注解开发(重点)

本章节我们开始学习Spring的注解,首先明确注解就是对原来XML配置的简化,二者实现的功能是一样的。

Spring常用注解

Spring常用注解主要是替代<bean>的配置

注意:使spring的注解生效,必须开启注解组件扫描

<?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"
       xmlns:p="http://www.springframework.org/schema/p"
       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">
    
    
    <!--开启spring的注解组件扫描-->
    <context:component-scan base-package="com.alibaba"/>
    
</beans>

IOC 对象创建

* @Component
    用于实例化对象,相当于配置文件中的<bean id="" class=""/>
    它支持一个属性value,相当于xml中bean的id,如果不写,默认值为类名的首字母小写
​
* @Controller  @Service  @Repository
    这三个注解的功能跟@Component类似,他们分别标注在不同的层上。
        @Controller  标注在表现层的类上
        @Service     标注在业务层的类上
        @Repository  标注在持久层的类上
    推荐使用这三个,当一个类实在不好归属在这三个层上时,再使用@Component

修改UserDaoImpl

package com.alibaba.dao.impl;
​
import com.alibaba.dao.UserDao;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
​
//  <bean id="userDao" class="com.alibaba.dao.impl.UserDaoMySQL"></bean>
// @Component(value = "userDao")
// @Component("userDao")
// @Component // value属性省略,默认值类名首字母小写  value="userDaoMySQL"
@Repository
public class UserDaoMySQL implements UserDao {
​
    @Override
    public void save() {
        System.out.println("操作MySQL数据库");
    }
}
​

修改UserServiceImpl

package com.alibaba.serivce.impl;
​
import com.alibaba.dao.UserDao;
import com.alibaba.serivce.UserService;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
​
//  <bean id="userSerivce" class="com.alibaba.serivce.impl.UserServiceImpl">
// @Component
@Service
public class UserServiceImpl implements UserService {
​
    // 声明dao成员变量
    private UserDao userDao;
​
    // set方法依赖注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
​
    @Override
    public void save() {
        userDao.save();
    }
}
​

DI 注入引用类型

- @Autowired:通过Class类从ioc容器中获得对象实例,相当于 ioc.getBean(Class类型)
​
- @Qualifie:需要跟@Autowired组合使用,相当于 ioc.getBean(id,Class类型)
​
- @Resource:由java提供  @Autowired + @Qualifie

修改UserServiceImpl

//  <bean id="userSerivce" class="com.alibaba.serivce.impl.UserServiceImpl">
// @Component
@Service
public class UserServiceImpl implements UserService {
​
    // 声明dao成员变量
    // <property name="userDao" ref="userDao"></property>
    // @Autowired
    // @Qualifier("userDaoOracle")
    @Resource(name = "userDaoOracle")
    private UserDao userDao;
​
​
    @Override
    public void save() {
        userDao.save();
    }
}

Bean生命周期

- @Scope:相当于<bean scope="singleton | prototype"></bean>
​
- @PostConstruct:相当于<bean init-method=""></bean>
​
- @PreDestroy:相当于<bean destroy-method=""></bean>

//  <bean id="userSerivce" class="com.alibaba.serivce.impl.UserServiceImpl">
// @Component
@Service
// @Scope("prototype") // 多例对象 <bean scope="prototype">
public class UserServiceImpl implements UserService {
​
    // 声明dao成员变量
    // <property name="userDao" ref="userDao"></property>
    // @Autowired
    // @Qualifier("userDaoOracle")
    @Resource(name = "userDaoOracle")
    private UserDao userDao;
​
​
    @Override
    public void save() {
        userDao.save();
    }
​
​
    @PostConstruct
    public void init(){
        System.out.println("创建成功了...");
    }
​
    @PreDestroy
    public void destroy(){
        System.out.println("销毁成功了...");
    }
}

DI 注入简单类型

- @Value 相当于:<property name="driverClassName" value="aaaaa"></property>

package com.alibaba.config;
​
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
​
// <bean id="myDataSouce" class="com.alibaba.config.MyDataSouce">
@Component
@Data
public class MyDataSouce {
​
    @Value("${jdbc.driver}")
    private String driverClassName ;  //  <property name="driverClassName" value="${jdbc.driver}"></property>
    @Value("${jdbc.url}")
    private String url; //  <property name="url" value="${jdbc.url}"></property>
    @Value("${jdbc.username}")
    private String username; // <property name="username" value="${jdbc.username}"></property>
    @Value("${jdbc.password}")
    private String password; //  <property name="password" value="${jdbc.password}"></property>
}

知识小结

xml配置 注解配置 说明
< bean id="" class="" > @Component @Controller @Service @Repository bean的实例化
< property name="" ref=""> @Autowired @Qualifier @Resource bean的对象属性注入
< property name="" value=""> @Value bean的简单属性注入
< bean scope=""> @Scope 控制bean的作用范围
< bean init-method="" destroy-method="" /> @PostConstruct @PreDestroy bean创建之后和销毁之前调用

Spring纯注解

使用上面的注解还不能全部替代xml配置文件,还需要使用注解替代的配置

- @Configuration:相当于applicationContext.xml
​
- @ComponentScan:相当于<context:component-scan base-p
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值