spring-注解开发

注解开发定义bean

1.使用@Component 定义bean
@Component("bookDao")
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book dao save ...");
    }
}
2.核心配置文件中通过组件扫描加载bean
    <context:component-scan base-package="com.itheima"/>
3.@Component定义bean,三个衍生的注解,功能一致,需要配置文件扫描标签

业务层使用@service ,数据层使用@ Repository ,控制层@ controller

纯注解开发

spring3.0 升级了纯注解开发模式

1.不需要使用配置文件
//声明当前类为Spring配置类
@Configuration
//设置bean扫描路径,多个路径书写为字符串数组格式
@ComponentScan({"com.itheima.service","com.itheima.dao"})
public class SpringConfig {
}

public class AppForAnnotation {
    public static void main(String[] args) {
        //AnnotationConfigApplicationContext加载Spring配置类初始化Spring容器
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        System.out.println(bookDao);
        //按类型获取bean
        BookService bookService = ctx.getBean(BookService.class);
        System.out.println(bookService);
    }
}
2.java类替代spring 核心配置文件
//声明当前类为Spring配置类
@Configuration
//设置bean扫描路径,多个路径书写为字符串数组格式
@ComponentScan({"com.itheima.service","com.itheima.dao"})
3.读取spring核心配置文件初始化容器对象切换为java 配置类初始化容器对象

//加载配置文件初始化
 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
   //加载配置类初始化
 ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);       

容器获取变为AnnotationConfigApplicationContext

bean作用范围和生命周期管理

作用范围

@scope使用来定义bean的作用范围


@Repository
//@Scope设置bean的作用范围
@Scope("singleton")
public class BookDaoImpl implements BookDao {

    public void save() {
        System.out.println("book dao save ...");
    }
    //@PostConstruct设置bean的初始化方法
    @PostConstruct
    public void init() {
        System.out.println("init ...");
    }
    //@PreDestroy设置bean的销毁方法
    @PreDestroy
    public void destroy() {
        System.out.println("destroy ...");
    }

}
生命周期

使用 @PostConstruct设置bean的初始化方法

@PreDestroy设置bean的销毁方法

注解开发依赖注入

使用@Autowired 注解开启自动装配模式(按类型),可以不用set方法

  @Autowired
private BookDao bookDao;

自动装配式基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法

自动装配建议使用无参构造方法创建对象,如果不是提供对应的构造方法,需要提供唯一的构造方法

使用@qualifier 注解开启指定名称装配bean,并且无法单独使用

  @Autowired
    //@Qualifier:自动装配bean时按bean名称装配
    @Qualifier("bookDao")
关于spring 配置并且依赖注入

1.配置一个文件

1.spring bean 配置

@Configuration
@ComponentScan("com.itheima")
//@PropertySource加载properties配置文件
@PropertySource({"jdbc.properties"})
public class SpringConfig {
}

2.注入依赖


@Repository("bookDao")
public class BookDaoImpl implements BookDao {
    //@Value:注入简单类型(无需提供set方法)
    @Value("${name}")
    private String name;

    public void save() {
        System.out.println("book dao save ..." + name);
    }
}

3.自动装配

@Service
public class BookServiceImpl implements BookService {
    //@Autowired:注入引用类型,自动装配模式,默认按类型装配
    @Autowired
    //@Qualifier:自动装配bean时按bean名称装配
    @Qualifier("bookDao")
    private BookDao bookDao;

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

4.打印输出


public class App {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        BookService bookService = ctx.getBean(BookService.class);
        bookService.save();
    }
}

读取到配置文件里的数据

总结: 使用 @PropertySource 注解properties加载文件,路径仅支持单一文件配置,多文件使用数组格式,不允许使用通配符*

@PropertySource({"jdbc.properties"})

注解开发实现第三方bean注入资源

引用类型依赖注入 @ Bean

引用注入类型只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

引用类型:方法形参

简单类型: 成员变量

总结

XML配置和注解配置对比

定义bean的方式不同

注解使用@component (service,controller,repository) @componentscan

xml配置使用bean 标签 id属性和class属性

设置依赖注入

xml使用的式setter注入(引用 简单) 构造器注入(引用,简单),自动装配

注解使用的是@Autowired (@Qualifier) @value

配置第三方 bean

xml :bean 标签 静态工厂, 实例工厂,factoryBean

注解: @ bean

作用范围

xml属性: scope属性

注解:@scope

生命周期

标准接口 init-method destroy-method

@Postconstructor @ Predestroy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值