IoC/DI注解开发

Spring的IOC/DI对应的配置开发已经学习过,但是使用起来相对来说还是比较复杂的,复杂的地方在配置文件。

在学习Spring的时候学过,Spring可以简化代码的开发,到现在并没有体会到。 所以Spring到底是如何简化代码开发的呢? 要想真正简化开发,就需要用到Spring的注解开发。

Spring对注解支持的版本历程: 2.0版开始支持注解 2.5版注解功能趋于完善 3.0版支持纯注解开发

注解开发定义bean

@Component注解如果不起名称,会有一个默认值就是当前类名首字母小写,所以也可以按照名称获取

 

不加id也可以用类型查找bean 

 

 component-scan

component:组件,Spring将管理的bean视作自己的一个组件

scan:扫描 base-package指定Spring框架扫描的包路径,它会扫描指定包及其子包中的所有类上的注解。 包路径越多[如:com.itheima.dao.impl],扫描的范围越小速度越快 包路径越少[如:com.itheima],扫描的范围越大速度越慢 一般扫描到项目的组织名称即Maven的groupId下[如:com.itheima]即可。

 

纯注解开发

纯注解开发模式,使用java类替代xml配置文件

新建一包,包下新建控制类文件SpringConfig.java

运行类用来实现操作

 

 运行成功

 注解开发定义bean的作用范围

将对象变成非单例

 注解开发定义bean的生命周期

PostConstructor    //构造方法后执行
PreDestory     //销毁前执行

 注意destroy只有容器关闭的时候才会执行,所以要ctx.close(),才能看到destroy执行

总结,注解开发和配置文件开发的区别

 注解开发注入对象mian

配置方法注入对象使用setter方法和配置bean的property属性

注解开发可以省略setter方法,免去property属性

只需在注入的对象前面加上@Autowired(自动装配)

@Autowired是按照类型注入,那么对应BookDao接口如果有多个实现类,比如添加 BookDaoImpl2,此时按照类型注入就无法区分注入哪个对象

解决方法是按照名称注入

 

@Qualifier,定义注入bean对象的名称 (必须和@Autowired配合使用)

 简单数据类型注入

简单类型注入的是基本数据类型或者字符串类型,下 面在BookDaoImpl类中添加一个name属性,用其进行简单类型注入

注意在配置文件中要添加

@PropertySource("jdbc.properties")  //用于设定value值的搜索路径

@value

@Value一般会被用在从properties配置文件中读取内容进行使用

注解开发管理第三方bean

@Bean

 

新建数据库连接配置文件jdbcConfig.java

public class JdbcConfig {
    @Bean    //@Bean注解的作用是将方法的返回值制作为Spring管理的一个bean对象
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/spring_01");
        ds.setUsername("mysql");
        ds.setPassword("xhsxcsjcnh");
        return ds;
    }
}

这个配置类要能够被Spring配置类加载到,使用@Import

@Configuration
//@ComponentScan("com.itheima.config")
@Import({JdbcConfig.class})
public class SpringConfig {
}

注解开发心得

实现类加入到容器中,要使用

@Component

配置类中可以扫描到要Bean对象,才能从容器中获得对象,所以需要用到

@ComponentScan

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值