基于注解方式实现属性注入
@Autowired
根据属性类型进行自动装配
@Qualifier
根据属性名称进行注入
@Resourse
可以根据类型注入,也可以根据名称注入
@Value
注入普通类型属性
基于注解方式实现属性注入 @Autowired
第一步 把service和dao类创建,在service和dao添加创建对象注解
第二步 把service注入dao对象,在service类添加dao类型属性,在属性上面使用注解
package com.test4.service; import com.test4.dao.UserDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; //在注解里面value属性值可以省略不写 //默认值是类名称,首字母小写 @Service public class UserService { //定义dao类型属性 //不需要添加set方法 @Autowired private UserDao userDao; public void add(){ System.out.println("userService add"); userDao.add(); } }
package com.test4.dao; public interface UserDao { void add(); }
package com.test4.dao; import org.springframework.stereotype.Repository; @Repository public class UserDaoImpl implements UserDao { @Override public void add() { System.out.println("userDao add"); } }
package com.test4.service; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import static org.junit.Assert.*; public class UserServiceTest { @Test public void add() { ApplicationContext context = new ClassPathXmlApplicationContext("spring12.xml"); UserService userService = context.getBean("userService", UserService.class); System.out.println("userService = " + userService); userService.add(); } }
userService = com.test4.service.UserService@222114ba
userService add
userDao add
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 开启组件扫描 如果要扫描多个包 方法一 多个包之间使用逗号隔开 方法二 扫描包的上层目录 --> <!--<context:component-scan base-package="com.test4.dao,com.test4.service"/>--> <context:component-scan base-package="com.test4"/> <!-- 开启组件扫描配置 示例1 use-default-filters="false" 表示现在不使用默认filter,使用自己配置的filter context:include-filter 扫描那些内容 --> <!--<context:component-scan base-package="com.test4" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!– 开启组件扫描配置 示例2 context:exclude-filter 不去扫描那些内容 –> <context:component-scan base-package="com.test4"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>--> </beans>
基于注解方式实现属性注入 @Qualifier
@Qualifier注解的使用,和上面的@Autowired一起使用
当有多个同类型的对象时 需要添加@Qualifier注解
例如:
userDao有多个实现类 impl1 impl2.。。。
这种情况需要使用@Qualifier注解
package com.test4.dao; import org.springframework.stereotype.Repository; @Repository(value = "userDaoImpl") public class UserDaoImpl implements UserDao { @Override public void add() { System.out.println("userDao add"); } }
package com.test4.service; import com.test4.dao.UserDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; //在注解里面value属性值可以省略不写 //默认值是类名称,首字母小写 @Service public class UserService { //定义dao类型属性 //不需要添加set方法 @Autowired @Qualifier(value = "userDaoImpl") private UserDao userDao; public void add(){ System.out.println("userService add"); userDao.add(); } }
基于注解方式实现属性注入 @Resourse
package com.test4.service; import com.test4.dao.UserDao; import org.springframework.stereotype.Service; import javax.annotation.Resource; //在注解里面value属性值可以省略不写 //默认值是类名称,首字母小写 @Service public class UserService { //定义dao类型属性 //不需要添加set方法 /* @Autowired @Qualifier(value = "userDaoImpl")*/ //@Resource //默认情况下是根据类型注入 //根据名称注入 @Resource(name = "userDaoImpl") private UserDao userDao; public void add(){ System.out.println("userService add"); userDao.add(); } }
基于注解方式实现属性注入 @Value
package com.test4.service; import com.test4.dao.UserDao; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; //在注解里面value属性值可以省略不写 //默认值是类名称,首字母小写 @Service public class UserService { @Value(value = "名字") private String name; //定义dao类型属性 //不需要添加set方法 /* @Autowired @Qualifier(value = "userDaoImpl")*/ //@Resource //默认情况下是根据类型注入 //根据名称注入 @Resource(name = "userDaoImpl") private UserDao userDao; public void add(){ System.out.println("userService add"); userDao.add(); } }