spring 依赖注入
Spring有4种方式来给属性赋值:
1. 构造方法注入
2. set方法注入
3. 自动装配
4. 注解
1. 构造方法注入
构造方法注入是指在构造方法中注入属性或者对象来实现依赖注入,如下所示,在标签中定义一个id为userDaoImpl的Bean,并通过注入了name为username,value为admin的值,注入完成后直接通过this.username获取到值admin。其中引用类型使用ref属性,基本类型使用value属性。
public class UserDaoImpl {
private String username;
public UserDaoImpl(String username) {
this.username = username;
}
}
xml代码
<bean id="userDaoImpl" class="com.example.UserDaoImpl">
<constructor-arg name="username" value="admin"></constructor-arg>
</bean>
2. SET方法注入
set方法注入就是通过在类中实现get、set方法来实现属性或者对象的依赖注入,如下所示,在标签中定义一个id为userDaoImpl的Bean,并通过注入了name为username,value为admin的值,注入完成后直接通过getUsername()获取到值admin。
public class UserDaoImpl {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
xml代码
<bean id="userDaoImpl" class="com.example.UserDaoImpl">
<property name="username" value="admin"></property>
</bean>
3. 自动装配
Spring提供了自动装配的功能,简化了我们的配置,自动装配默认是不打开的,常用的方式有两种:
byName:通过参数名自动装配,如下所示,id为userService的的autowire被设置为byName后,IOC容器会通过名字来自动装配,发现UserService类中有个叫userDao的属性,然后看看IOC容器中有没有id为userDao的,如果有就装配进去。
<bean id="userDao" class="com.example.UserDao"></bean>
<bean id="userService" class="com.example.UserService" autowire="byName"/>
byType:通过参数类型自动装配,当autowire被设置为byType后,IOC容器会看看里面有没有UserDao类型的,有就装配进去。
<bean id="userDao" class="com.example.UserDao"></bean>
<bean id="userService" class="com.example.UserService" autowire="byType"/>
4. 注解
@Autowired注解可以实现自动装配,只要在对应的属性上标记该注解,但是@Autowired注解只按照byType注入。
public class UserController {
@Autowired
private IUserService userService;
}
@Qualifier:
作用:再按照类中注入的基础之上再按照名称注入,它在给类成员注入时不能单独使用和Autowired配合使用,但是给方法注入时可以
属性:value:用于指定注入bean的id
@Resources
作用:直接按照bean的id注入,它可以独立使用
属性:name:用于指定bean的id
@Value
作用:用于注入基本类型和String类型数据
属性:value:用于指定数据的值,它可以使用spring中的spEL(也就是spring的el表达式)
@Component: 作用:用于当前类存入spring容器
@Controller : 用于表现层
@Service: 用于业务层
@Repository: 用于持久层

浙公网安备 33010602011771号