基于注解方式实现属性注入
@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();
}
}
