Spring学习——注解开发

注解开发

使用注解形式定义bean

  • @Component(通用)
  • 功能相同,只用来区分不同用途的bean
    • @Controller(表现层)
    • @Service(业务层)
    • @Repository(数据层)
@Component("bookDao")
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book dao save ...");
    }
}

配置文件扫描bean

在applicationContext.xml中配置

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

纯注解开发

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

  • 将配置文件修改为配置对象

    package com.jihua.config;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ComponentScan("com.jihua")
    public class SpringConfig {
    }
    
  • 读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象

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

bean管理

bean作用范围

  • 使用@Scope定义bean作用范围

    @Repository
    @Scope("singleton")
    public class BookDaoImpl implements BookDao {
    }
    

bean生命周期

  • 使用@PostConstruct、@PreDestroy定义bean生命周期

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

依赖注入

自动装配

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

    @service
    public class BookServiceImpl implements BookService {
    	@Autowired
    	private BookDao bookDao;
    	public void setBookDao(BookDao bookDao) {
    		this.bookDao = bookDao;
    	}
    	public void save() {
    		System.out.print1n( "book service save ...");
            bookDao.save();
    	}
    }
    
    • 注意∶自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
    • 注意∶自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
  • 使用@Qualifier注解开启指定名称装配bean

    @Service
    public class BookServiceImpl implements BookService {
    	@Autowired
    	@Qualifier("bookDao")
        private BookDao bookDao;
    }
    
    • 注意:@Qualifier注解无法单独使用,必须配合@Autowired注解使用
  • 使用@Value实现简单类型注入

    @Repository("bookDao")
    public class BookDaoImpl implements BookDao {
        @Value("100")
        private String connectionNum;
    }
    

加载properties文件

  • 使用@PropertySource注解加载properties文件

    在配置类SpringConfig中:

    @Configuration
    @ComponentScan("com.jihua")
    @PropertySource("classpath:jdbc.properties")
    public class SpringConfig {
    }
    
    • 注意︰路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*

第三方bean管理

第三方bean管理

扫描式

在JdbcConfig配置类中:

@Configuration
public class JdbcConfig {
    @Bean
    public DataSource dataSource() {
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://127.0.0.1:3306/ssm");
        ds.setUsername("root");
        ds.setPassword("passwd");
        return ds;
    }
}

在SpringConfig配置类中:

@Configuration
@ComponentScan("com.jihua")
public class SpringConfig {
}

不过不推荐使用这种扫描方式,不能只管看出来使用了哪个配置类,建议在SpringConfig配置类中使用@Import注解

导入式

在JdbcConfig配置类中:

public class JdbcConfig {
    @Bean
    public DataSource dataSource() {
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://127.0.0.1:3306/ssm");
        ds.setUsername("root");
        ds.setPassword("520025");
        return ds;
    }
}

在SpringConfig配置类中:

@Configuration
@Import(JdbcConfig.class)
public class SpringConfig {
}

第三方bean依赖注入

  • 简单类型依赖注入

    public class JdbcConfig {
        @Value ("com. mysql.jdbc.Driver")
        private String driver;
        @Value("jdbc:mysql://localhost:3306/ssm")
        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定义方法设置形参即可,容器会根据类型自动装配对象

总结

比较XML配置与注解配置

  • XML配置比对注解配置

1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值