Spring之初识IOC常用注解(三)

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 Spring之初识IOC常用注解(三),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1.用于创建对象的

作用和在XML配置文件中编写一个标签实现的功能是相同的。

相当于<bean id=”” class=””></bean>

@Component:
          作用:把当前类对象存入spring容器中,让 spring 来管理。相当于在 xml 中配置一个 bean。
          
          属性:
               value:指定 bean 的 id。不写时,它的默认值是当前类名,且首字母改小写。
               
@Controller:一般用在表现层

@Service:一般用在业务层

@Repository:一般用在持久层

@Controller、@Service、@Repository三个注解是@Component的 衍生注解,其作用和属性与Component是相同的。只不过是提供了更加明确的语义化。
方式一:指定Bean的id
@Service("userService")
public class UserServiceImpl implements IUserService {
}

 @Test
    public void test() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        IUserService as = ac.getBean("userService", IUserService.class);
        }
        
方式二:不指定Bean的id,默认值是当前类名,且首字母改小写。
@Service
public class UserServiceImpl implements IUserService {
}

 	@Test
    public void test() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        IUserService as = ac.getBean("userServiceImpl ", IUserService.class);
        }

2.用于注入数据的

作用和在xml配置文件中的bean标签中写一个标签的作用是相同的。

相当于:<property name=”” ref=”” /> <property name=”” value=””/>

@Autowired:
           作用: 
           		自动按照类型注入。当使用注解注入属性时,set方法可以省略。
           		 1.只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,则注入成功
                 2.如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则注入失败。
                 3.如果Ioc容器中有多个类型匹配时:使用要注入的对象变量名称作为 bean 的 id,在 spring 容器进行查找,若找到则注入成功,反之失败。

@Qualifier:
           作用:
           		在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。
           		在给字段注入时不能独立使用,必须和@Autowire 一起使用;但是给方法参数注入时,可以独立使用。

           属性:
               value:用于指定注入bean的id。
               
@Resource
           作用:
           		直接按照bean的id注入。它可以独立使用
           
           属性:
               name:用于指定bean的id。
               
@Autowired、@Qualifier、@Resource三个注解都只能注入其他bean类型的数据。基本类型和String类型无法使用上述注解实现。集合类型的注入只能通过XML来实现。
 
@Value
		   作用:
				用于注入基本类型和String类型的数据
		   属性:
		  	    value:用于指定数据的值。可以使用spring中SpEL
//1.有唯一的一个bean对象类型和要注入的变量类型匹配

@Repository(value = "userDao")
public class UserDaoImpl implements IUserDao {
}

@Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private IUserDao userDao;
    
  }
  
//2.有多个类型匹配:使用要注入的对象变量名称作为 bean 的 id  
@Repository(value = "userDao1")
public class UserDaoImpl implements IUserDao {
}

@Repository(value = "userDao2")
public class UserDaoImpl2 implements IUserDao {
}

@Service
public class UserServiceImpl implements IUserService {

     //@Autowired
     //private IUserDao userDao;
    
     //1.指定注入对象变量名称作为 bean 的 id 
 	 @Autowired
     private IUserDao userDao2;

	// 2.有多个类型匹配时,使用@Qualifier指定注入bean的id
		@Autowired
	    @Qualifier("userDao1")
	    private IUserDao userDao;  
	    
	//3.直接按照bean的id注入
	    @Resource("userDao2")
	    private IUserDao userDao;  
    
  }
  

3.用于改变作用范围的

作用和在bean标签中使用scope属性实现的功能是相同的。

相当于:<bean id=”” class=”” scope=””>

@Scope
         作用:
         		用于指定bean的作用范围
          属性:
              	value:指定范围的取值。
              				取值:singleton prototype request session globalsession
              				常用取值:singleton prototype
@Service
@Scope("prototype")
public class UserServiceImpl implements IUserService {
}

4.和生命周期相关

作用和在bean标签中使用init-method和destroy-methode的作用是相同的。

相当于:<beanid=”” class=”” init-method=”” destroy-method=”” />

@PreDestroy
           作用:用于指定销毁方法
@PostConstruct
           作用:用于指定初始化方法
     @PostConstruct
    public void  init(){
        System.out.println("初始化方法。。。");
    }

    @PreDestroy
    public void  destroy(){
        System.out.println("销毁方法。。。");
    }

5.执行测试

    @Test
    public void test() {
        
        ClassPathXmlApplicationContextac = new ClassPathXmlApplicationContext("bean.xml");
        IUserService as = ac.getBean("userServiceImpl", IUserService.class);
        
            as.findAllUser();
           // 注意:若把子类型ClassPathXmlApplicationContext看成父类型ApplicationContext 就只能调用父类型方法,此时就无法close
           //ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
            ac.close();
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137138.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!