第7章 注解开发

注解开发

§ 注解开发定义bean

bean代码

在实现类添加注解@Component(id)代替配置文件中的bean标签

  • 默认id是该类首字母小写
@Component("bookDao")
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book save dao");
    }
}

配置文件

配置上下文相关来扫描

<context:component-scan base-package="com.itheima" />

衍生注解

增强可读性,对于@Component,提供相同功能的一下注解

  • @Controller:用于表现层bean定义
  • @Service:用于业务层bean定义
  • @Repository:用于数据层bean定义

§ 纯注解开发

新建config.SpringConfig类来代替配置文件

  • 注解@Configuration来指示该类是配置类
  • 注解@ComponentScan来指示扫描路径
    • 多个扫描路径使用{"com.1","com.2"}的数组形式作为该注解value
@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
}

新建注解开发配置的IoC容器,实现类为AnnotationConfigApplicationContext

ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

§ bean管理

作用范围

使用@Scope注解

  • singleton,单例
  • prototype,非单列
@Component("bookDao")
@Scope("prototype")
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book save dao");

    }

}

生命周期

@PostConstruct
public void init() {
    System.out.println("init");
}
@PreDestroy
public void destroy() {
    System.out.println("destroy");
}

§ 依赖注入

自动装配

使用注解@Autowired实现自动注入

数据层代码

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;

    public void save() {
        System.out.println("book service save");
        bookDao.save();
    }
}

注意

  • 默认按类型装配,使用了反射里的暴力反射注入,需要提供无参构造方法(默认),不用提供setter

  • 如果有多个实现类,需要按名称装配

    • @Component指定名称
    • 同时使用注解@Autowired@Qualifier("bookDao")来指定名称

注入简单类型

使用@Value(V)指定默认值

public class BookDaoImpl implements BookDao {
    @Value("likuntong")
    private String name;
    public void save() {
        System.out.println("book save dao");
        System.out.println("name " + name);
    }
}

加载外部properties文件的属性值

在配置类新增@Proerties(FileName)注解指定配置文件

  • 不支持通配符
  • 多个文件使用{"1","2"}的形式
@Configuration
@ComponentScan("com.itheima")
@PropertySource("jdbc.properties")
public class SpringConfig {
}

使用${}取配置值

@Repository
public class BookDaoImpl implements BookDao {
    @Value("${jdbc.username}")
    private String name;
  
    public void save() {
        System.out.println("book save dao");
        System.out.println("name " + name);
    }
}

§ 第三方bean管理

新建一个管理jdbc的配置类

  • 基本类型成员使用@Value注入
  • 引用类型在@Bean方法上使用形参注入(按类型装配)
public class JdbcConfig {
  	@Value("ahh")
    private String username;
    // 1. 定义一个方法获得要管理的对象
    // 2. 添加@Bean,表示当前方法的返回值是一个bean
    @Bean
    public DataSource dataSource(BookDao bookDao) {
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
        ds.setUsername(username);
        ds.setPassword("root");
        return ds;
    }
}

使用@Import()导入

@Configuration
@Import({JdbcConfig.class})
public class SpringConfig {
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值