Spring学习笔记(一) - 注解开发

Spring学习笔记(一) - 注解开发(重点内容)

注解开发定义Bean

  • 使用@Component定义bean

    //在调用getBean时参数为bookService.class 不需要强制类型转换
    @Component
    public class BookServiceImpl implements BookService {
       
       public void save() {
           System.out.println("book service save ...");
       }
    }
    
    //在调用getBean时参数为"bookDao",需要强制类型转换
    @Component("bookDao")
    public class BookDaoImpl implements BookDao {
    
        public void save() {
            System.out.println("book dao save ...");
        }
    }
    
  • 核心配置文件中通过组件扫描加载bean

    <!-- 确定扫描的范围,通常情况下指定路径可以扫描对应的包及其子包所有的内容,即递归扫描 -->
    <context:component-scan base-package="com.itheima"/>
    
  • Spring提供了@Component注解的三个衍生注解,格式同@Component
    @Controller:用于表现层bean定义
    @Service:用于业务层bean定义
    @Repository:用于数据层bean定义

纯注解开发

@Configuration注解用于设定当前类为配置类
@ConponentScan注解设定扫描路径,此注解只能添加一次,多个数据请用数组格式

  • 通过Java类代替Spring核心配置文件
    //@ComponentScan里面的参数可以通过添加{}选择扫描多个路径下的包
    @Configuration
    @ComponentScan("com.itheima")
    public class SpringConfig {
    
    }
    
  • 加载的方法
    public class AppForAnnotion {
    
        public static void main(String[] args) {
        	//加载配置类初始化容器
            ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
            BookDao bookDao = (BookDao) ctx.getBean("bookDao");
            bookDao.save();
        }
    }
    

Bean作用范围 与 Bean生命周期

  • 使用@Scope定义bean作用范围
  • 使用@PostConstruct@PreDestroy
    @Component
    @Scope("singleton")
    public class BookServiceImpl implements BookService {
    
        public void save() {
            System.out.println("book service save ...");
        }
    
        @PostConstruct
        public void init(){
            System.out.println("init...");
        }
    
        @PreDestroy
        public void destroy(){
            System.out.println("destroy...");
        }
    }
    

注解开发依赖注入

引用类型

  • 使用@Qualifier注解开启指定名称装配bean

    public class BookServiceImpl implements BookService {
    	//@Qualifier注解不能单独使用必须配合@Autowired注解使用
    	@Autowired
    	@Qualifier("bookDao")
    	private BookDao bookDao;
    }
    
  • 注意:
    自动装配基于反射设计创建对象并暴力反射对应属性为私有属性的私有化数据,因此无需提供setter方法;
    自动装配建议使用无参构造方法对象(默认),如果不提供对应构造方法,请提供唯一的构造方法;

简单类型

  • 使用@value 实现简单类型注入 (注意:路径仅单一文件配置,多文件请使用数组格式配置,不允许使用通配符 *)
    public class BookDaoImpl implements BookDao {
    	@Value("mysql")
    	private String connectionName;
    }
    
  • 使用 @PropertySource 注解加载properties文件
    @Component("bookDao")
    @PropertySource("jdbc.properties")
    public class BookDaoImpl implements BookDao {
    
        @Value("${name}")
        private String connectionName;
    
        public void save() {
            System.out.println("book dao save ..."+connectionName);
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值