spring注解开发

注解开发bean

使用@Component定义bean

@Component("bookDao")
public class BookDaoImpl implements BookDao {}

@Component
public class BookServiceImpl implements BookService {}

核心配置文件中通过组件扫描加载bean

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

Spring提供

@Component注解的三个衍生注解
    @Controller:用于表现层bean定义
    @Service:用于业务层bean定义
    @Repository:用于数据层bean定义
@Repository("bookDao")
public class BookDaoImpl implements BookDao {)
@Service
public class BookServiceImpl implements BookService {)

纯注解开发-

Spring3.0开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道Java类代替Spring核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/eans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchemd instance"
    xsi: schemaLocation="
        http://www.springframework.org/ schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd"><context:component-scan base-package='Com.lyl)"/>
    <comtext:component-scan base-packge="com.lyl">
</beans>

@Configuration            代替除了<comtext:component-scan base-packge="com.lyl">配置文件的其他部分
@Componentscan("com.lyl" )代替这个<comtext:component-scan base-packge="com.lyl">
public class SpringConfig {}

        @Configuration注解用于设定当前类为配置类

        @ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式

        @ComponentScan({"com.itheima.service", "com.itheima.dao"})

bean的生命周期与作用范围

        使用@PostConstruct、@PreDestroy定义bean生命周期@Scope声明作用范围

@Repository
@scope("singleton")
public class BookDaoImpl implements BookDao {
    public BookDaoImpl() {
        System.out.println( "book dao constructor ..." );
    }
    @PostConstruct
    public void init() {
        System.out.println( "book init ..." );
    }
    @PreDestroy
    public void destroy() {
        System.out.println( "book destory ..." );
    }
}

依赖注入

基本类型注入

使用 @Value

引用类型注入

使用@Autowired注解开启自动装配模式(按类型)

@Service
public class BookserviceImpl implements BookService {
    @Autowired
    @Qualifier("")//可以用这个注解来指定bean的名称
    private BookDao bookDao;
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
    public void save() {
        System.out.println( "book service save ..." );bookDao.save();
    }
}

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

注意∶自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法

加载properties文件

使用@PropertySource注解加载properties文件

@Configuration
@ComponentScan("com.lyl" )
@PropertySource("classpath :jdbc.properties")
public class SpringConfig {
}

注意∶路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*

第三方bean管理

将独立的配置类加入核心配置

方式一︰导入式

public class JdbcConfig {
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        //相关配置
    return ds;
    }
}

使用@Import注解手动加入配置类到核心配置,此注解只能添加一次,多个数据请用数组格式

@Configuration
public class JdbcConfig {
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();//相关配置
    return ds;
    }
}

使用@ComponentScan注解扫描配置类所在的包,加载对应的配置类信息

@Configuration
@ComponentScan({"com.lyl.config", "com.lyl.service", "com.lyl.dao"})
public class SpringConfig {}

第三方bean依赖注入

简单类型依赖注入

public class JdbcConfig {
    @value("com.mysql.jdbc.Driver")
    private String driver;
    @Value("jdbc:mysql://localhost: 3306/spring_db")
    private String url;
    @Value("root")
    private String userName;
    @Value("root")
    private String password;
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName( driver);
    ds.setUrl(url);
    ds.setUsername(userName );
    ds.setPassword(userName );
    return ds;
    }
}

引用类型依赖注入

@Bean
public DataSource dataSource(BookService bookService){
    system.out.println(bookService);
    DruidDataSource ds = new DruidDataSource();//属性设置
    return ds;
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值