@Service
的作用
spring
中有很多注解帮助我们开发,@Repository、@Service 、@Controller 和@Component注解在类上面即可以使spring
自动向Bean
容器中创建该类的Bean
,而在我们需要用到该Bean
来创建对象时,在变量声明上方添加@AutoWired
或者@Qualifier
即可。
@Service(value="XXX")
中的XXX的作用
@service
注解工作原理:在service层类上面添加@Service
注解,会自动创建Bean
,Bean
的名字为类的名字首字母小写,也可以自己指定名字@Service(value="XXXX")
,这个名字或者说Bean
的名字有什么用呢?是为了使用名字进行属性注入时使用的。
对象属性注入:如果是使用类来创建对象,使用数据类型注入方式AutoWired
属性注入就直接生成一个对象,因为一个类时唯一的。当使用接口创建对象时,使用@AutoWired
它会去找该数据类型接口的实现类来创建对象。但是当该接口有多个实现类时,该怎么办,这时就需要加上通过名字进行注入属性了,通过什么名字呢,即Bean
的名字,这时候上面的@Service(value="XXX")
里面的 XXX
就用到了,使用@Qualifier("XXX")
来指定特定的类来进行属性注入。
这就是@Service
的value
作用
//UserDao类
//Repository是使用注解让spring扫描到该类,并创建bean
@Repository
public class UserDaoImpl implements UserDao {
@Override
public void add() {
System.out.println("UserDaoImpl.add........");
}
}
@Repository
public class UserDaoImpl2 implements UserDao {
@Override
public void add() {
System.out.println("UserDaoImpl2.add........");
}
}
//UserServer类
@Service
public class UserServer {
//当UserDao类只有一个时,只使用AutoWired可以进行注入,但是有两个该变量类型的对象时就会报错
//所以一般变量类型和变量名注入一起使用更加准确
@Autowired
@Qualifier("userDaoImpl2")
//@Resource Resource使用类型注入
//@Resource(name="userDaoImpl2") Resource使用名字注入
UserDao userDao;
//为普通类型注入属性
@Value(value="abc")
String name;
public void add(){
System.out.println("userServer.add........");
userDao.add();
}
}