SpringIOC-注解式

IOC操作Bean管理(基于注解方式)

  1.什么是注解
  (1)注解是代码的特殊标记, 格式  @注解名(属性名=值,属性2=值2)
  (2)使用注解,注解作用在 类上面,方法上,属性上
  (3)使用注解目的: 简化xml配置
  2.spring针对bean 管理中创建对象提供注解
  (1) @Component  
  (2) @Service
  (3) @Controller
  (4) @Repository
  上面的四个注解功能是一样的,都可以用来创建对象
   3.基于注解方式实现对象的创建
   (1) 引入依赖 spring-aop-.jar
   (2) 开启组件扫描: 先引入context命名空间
   

    
    (3)创建类, 在类上 添加 之前4个注解之一

    package com.ly.service;
 ​
 import org.springframework.stereotype.Component;
 //注解里面value属性值可以省略不写,
 //默认值是 类名,首字母小写
 //UserService--->userService
 @Component // 
 public class UserService {
     public void add(){
         System.out.println("--UserService--------add");
     }
 }
 ​
 测试
    @Test
     public void testMyBean(){
         ApplicationContext ac = new         ClassPathXmlApplicationContext("bean1.xml");
         UserService s = ac.getBean("userService",UserService.class);
         s.add();
     }
     
     //控制台 输出
     --UserService--------add
 ​

开启组件扫描细节配置

 

    
    
       
    
 ​
 ​
   
    
       
    

基于注解方式实现属性注入

1.@AutoWired:根据属性 类型 进行自动装配

a. 把 service和dao对象创建,在service和dao类添加创建对象的注解

b.在service中注入dao,在service类添加dao类型属性,并添加@AutoWired ,(不需要set方法)

 package com.ly.service;
 ​
 import com.ly.dao.UserDao;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 ​
 //注解里面value属性值可以省略不写,
 //默认值是 类名,首字母小写
 //UserService--->userService
 @Service
 public class UserService {
     @Autowired   //根据类型注入
     private UserDao userDao;
 ​
     public void add(){
         userDao.add();
         System.out.println("--UserService--------add");
     }
 }
 ​
 
package com.ly.dao;
 ​
 public interface UserDao {
     public void add();
 }
 ​
 package com.ly.dao.impl;
 ​
 import com.ly.dao.UserDao;
 import org.springframework.stereotype.Repository;
 ​
 @Repository
 public class UserDaoImpl implements UserDao {
     @Override
     public void add() {
         System.out.println("dao add ......");
     }
 }


  
 测试类
   
    @Test
     public void testMyBean(){
         ApplicationContext ac = new ClassPathXmlApplicationContext("bean1.xml");
         UserService s = ac.getBean("userService",UserService.class);
         s.add();
     }
 ​
 控制台输出
     
 dao add ......
 --UserService--------add

2.@Qualifier:根据属性名称 进行注入

@Qualifier和@Autowired 一起使用

 一个接口 可以有多个实现类, 当 使用时  就可以通过 @Qualifier和@Autowired 指定 名字 来指定具体实现
 ​
 ​
 
package com.ly.dao.impl;
 ​
 import com.ly.dao.UserDao;
 import org.springframework.stereotype.Repository;
 ​
 @Repository(value = "userDao1")
 public class UserDaoImpl implements UserDao {
     @Override
     public void add() {
         System.out.println("dao add ......");
     }
 }
 package com.ly.dao;
 ​
 public interface UserDao {
     public void add();
 }
package com.ly.service;

import com.ly.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

//注解里面value属性值可以省略不写,
//默认值是 类名,首字母小写
//UserService--->userService
@Service
public class UserService {
    @Autowired   //根据类型注入
    @Qualifier(value = "userDao1")
    private UserDao userDao;

    public void add(){
        userDao.add();
        System.out.println("--UserService--------add");
    }
}

 
  @Test
     public void testMyBean(){
         ApplicationContext ac = new ClassPathXmlApplicationContext("bean1.xml");
         UserService s = ac.getBean("userService",UserService.class);
         s.add();
     }
 ​
 控制台输出
     dao add ......
 --UserService--------add

3.@Resource: 可以根据类型注入,也可以根据名称注入

javax.annotation.Resource 是 java中的扩展包, 而不是spring中的, ,因此 spring 官方不太推荐使用

 package com.ly.service;
 ​
 import com.ly.dao.UserDao;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 ​
 import javax.annotation.Resource;
 ​
 //注解里面value属性值可以省略不写,
 //默认值是 类名,首字母小写
 //UserService--->userService
 @Service
 public class UserService {
    @Resource    //根据类型注入     
     // 改为 @Resource(name = "userDaoImpl")   则是按照 名称 注入
     private UserDao userDao;
 ​
     public void add(){
         userDao.add();
         System.out.println("--UserService--------add");
     }
 }
 ​

4.@Value 注入普通类型

  @Value(value="nihao")
 private String name;        // 此时 name 属性的值 就是 nihao

纯注解开发

 //1. 创建配置类,替代xml配置文件

 package com.ly.config;
 ​
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 ​
 @Configuration    //创建配置类 ,替代xml配置文件
 @ComponentScan(basePackages = {"com.ly"})    //配置扫描包 信息
 public class SpringConfig {
 }
  
 //2.编写测试类
 
 @Test
     public void testMyBean2(){
         ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);// 加载配置类
         UserService s = ac.getBean("userService",UserService.class);
         s.add();
     }

你可能感兴趣的:(Spring,java,spring)