导入依赖 aop
@Component 放在类上,用于标记,告诉spring当前类需要由容器实例化bean并放入容器中
(资料图片仅供参考)
该注解有三个子注解
@Controller 用于实例化controller层bean
@Service 用于实例化service层bean
@Repository 用于实例化持久层bean
当不确定是哪一层,就用Component
这几个注解互相混用其实也可以,但是不推荐
package com.lanson.bean;import org.springframework.stereotype.Component;/** * @Author: Lansonli * @Description: MircoMessage:Mark_7001 */@Component(value = "user1")public class User {}
package com.lanson.test;import com.lanson.bean.User;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * @Author: Lansonli * @Description: MircoMessage:Mark_7001 */public class Test1 { @Test public void testGetBean(){ ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml"); User user = context.getBean("user1", User.class); System.out.println(user); }}
@Autowired 根据属性数据类型自动装配
@Qualifier 根据属性名称注入依赖
@Resources 可以根据类型,也可以根据名称注入
@Value 注入普通数据类型(8+String)
项目结构如下
applicationContext.xml中配置包扫描和读取属性配置文件
Dao层接口
实现类
让容器扫描 Service层,实例化对象接口
实现类
package com.lanson.service.impl;import com.lanson.dao.UserDao;import com.lanson.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Service;import javax.annotation.Resource;/** * @Author: Lansonli * @Description: MircoMessage:Mark_7001 */@Servicepublic class UserServiceImpl implements UserService { /* *@Autowired * 根据类型到容器中去寻找对应的对象,找到后给当前属性赋值 * 不需要依赖 set方法 * 属性类型可以是接口,会自动匹配对应的实现类对象 * @Autowired配合 @Qualifier,可以通过名称指定注入的对象 * * @Resource 如果不配置name 那么就是根据类型注入 * @Resource(name="userDaoImplB") 配置name,就是根据名称注入 * * * @Resource 是JDK中javax包的注解 * @Autowired 和 @Qualifier 是spring中的注解 * * @Value 可以个普通属性赋值 * @Value 可以使用${}这种表达式获取系统的变量值 * 或者是.properties属性配置文件中的值 * * */ //@Autowired //@Qualifier("userDaoImplA") //@Qualifier("userDaoImplB") //private UserDao userDao ; @Resource(name="userDaoImplB") private UserDao userDao ; @Value("${username}") private String sname; @Value("boy") private String sgender; @Value("${age}") private Integer sage; @Override public void add() { System.out.println("userServiceImpl add ... ... "); System.out.println(sname); System.out.println(sgender); System.out.println(sage); userDao.add(); }}
测试代码
package com.lanson.test;import com.lanson.service.UserService;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * @Author: Lansonli * @Description: MircoMessage:Mark_7001 */public class Test1 { @Test public void testGetBean(){ ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = context.getBean("userServiceImpl", UserService.class); userService.add(); }}
创建配置类,替代XML配置文件
测试代码
@Testpublic void testGetBean2(){ ApplicationContext context=new AnnotationConfigApplicationContext(SpringConfig.class); UserServiceImpl userService = context.getBean("userServiceImpl", UserServiceImpl.class); userService.add();}
X 关闭