博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring(四)注解配置Ioc
阅读量:6474 次
发布时间:2019-06-23

本文共 4056 字,大约阅读时间需要 13 分钟。

原文链接:

一、@Autowired

beans.xml配置成如下:

   
    
            
    

当我们在配置文件中配置了<context:annotation-config/>时,spring会自动帮我们初始化四个bean(AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor, PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor)来处理我们在代码中的注解

 

然后UserService.java:

代码中的注解@Autowired默认是byType,所以beans.xml中不能出现两个类型相同的bean,因为如果类型一致spring就不知道应该注入哪一个了。

package ml.orlion.service;import org.springframework.beans.factory.annotation.Autowired;import ml.orlion.dao.UserDAO;import ml.orlion.dao.impl.UserDAOImpl;import ml.orlion.model.User;public class UserService {    private UserDAO userDAO = new UserDAOImpl();    public UserDAO getUserDao() {                return userDAO;    }    @Autowired    public void setUserDao(UserDAO userDAO) {        this.userDAO = userDAO;    }        public void saveUser(User user){        this.userDAO.saveUser(user);    }}

测试一下

BeanFactory appContext = new ClassPathXmlApplicationContext("beans.xml");UserService userService = (UserService) appContext.getBean("userService");userService.saveUser(new User());

输出saving user,即成功调用了UserDAOImpl中的save方法

 

上边的代码有一个限制就是beans.xml中一个类只能配置一个bean,比如beans.xml配置成如下这样时就会报错

   
    
            
            
    

这时候可以把UserService类改成如下(在setUserService方法中加注解)

package ml.orlion.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import ml.orlion.dao.UserDAO;import ml.orlion.dao.impl.UserDAOImpl;import ml.orlion.model.User;public class UserService {    private UserDAO userDAO = new UserDAOImpl();    public UserDAO getUserDao() {                return userDAO;    }    @Autowired    public void setUserDao(@Qualifier("userDao") UserDAO userDAO) {        this.userDAO = userDAO;    }        public void saveUser(User user){        this.userDAO.saveUser(user);    }}

这时候再运行就不会报错了。

二、@Reosource

从bean容器中注入bean,默认是按名字查找,找不到再按类型,可以指定名字

 

beans.xml中配置

   
   

UserService.java:

package ml.orlion.service;import javax.annotation.Resource;import ml.orlion.dao.UserDAO;import ml.orlion.dao.impl.UserDAOImpl;import ml.orlion.model.User;public class UserService {	private UserDAO userDAO = new UserDAOImpl();	public UserDAO getUserDao() {				return userDAO;	}	@Resource(name="userDao")	public void setUserDao(UserDAO userDAO) {		this.userDAO = userDAO;	}		public void saveUser(User user){		this.userDAO.saveUser(user);	}}

测试可以运行会输出saving user

 

三、@Component

将一个类声明为spring的bean

beans.xml

   
   
   

其中<context:component-scan base-package="ml.orlion"></context:component-scan>表示从包名为ml.orlion下的所有类中找Component.

UserDAOImpl.java

package ml.orlion.dao.impl;import org.springframework.stereotype.Component;import ml.orlion.dao.UserDAO;import ml.orlion.model.User;@Component("userDao") //默认名字是userDaoImplpublic class UserDAOImpl implements UserDAO{	public void saveUser(User user){		System.out.println("save usering");	}}

UserService.java

package ml.orlion.service;import javax.annotation.Resource;import org.springframework.stereotype.Component;import ml.orlion.dao.UserDAO;import ml.orlion.dao.impl.UserDAOImpl;import ml.orlion.model.User;@Component("userService")public class UserService {	private UserDAO userDAO = new UserDAOImpl();	public UserDAO getUserDao() {				return userDAO;	}	@Resource(name="userDao")	public void setUserDao(UserDAO userDAO) {		this.userDAO = userDAO;	}		public void saveUser(User user){		this.userDAO.saveUser(user);	}}

测试一下:

BeanFactory appContext = new ClassPathXmlApplicationContext("beans.xml");UserService userService = (UserService) appContext.getBean("userService");userService.saveUser(new User());

运行会输出saving user

 

四、@Scope、@PostConstruct、@PreDestroy

可以在类定义之前添加注释@Scope("prototype")将bean声明为每次调用时都重新new一个。

@PostConstructbean声明在初始化时运行的方法

@PreDestroy声明在销毁时运行的方法

转载于:https://www.cnblogs.com/orlion/p/5350863.html

你可能感兴趣的文章
几种进程间的通信方式
查看>>
sign check fail: check Sign and Data Fail!
查看>>
服务器采购
查看>>
安装Redis完整过程
查看>>
数据加密解密及openssl建立CA
查看>>
sfu
查看>>
一个数据表里有单价有数量,数量可以修改,还有checkbox选择
查看>>
图片压缩
查看>>
Manifest合并
查看>>
jQuery的Cookie操作插件
查看>>
模拟优酷像关电视一样的退出效果
查看>>
通过Chromium OS尝鲜Chrome OS
查看>>
Programming udp sockets in C on Linux
查看>>
学习pyqt4 基础 2
查看>>
Windows 安装使用curl
查看>>
快速开发之数据字典设计
查看>>
Apache/Tomcat/JBOSS/Nginx区别
查看>>
tf pb 转 tfjs 将固定大小的输入 改为任意输入
查看>>
mysql联合主键,自增长(要区分数据库引擎)
查看>>
Object类和String类 equals() 方法的区别
查看>>