使用注解注入的方式,可以不用提供 set 方法
1、普通属性
@Value :用于注入普通类型.
2、对象属性
@Autowired :自动装配:
- 默认按类型进行装配.
- 如果存在两个相同Bean类型相同,则按照名称注入:
- @Qualifier:强制使用名称注入.
@Resource 相当于:
- @Autowired 和@Qualifier 一起使用.
演示
1、dao实现
package com.test.dao.impl;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import com.test.dao.UserDao;
import com.test.domain.User;
//可以不写名字;使用@Component注解就相当于在配置中写了一个bean
//@Component(value = "userdao")
@Repository(value = "userdao")
public class UserDaolmpl implements UserDao {
public List<User> findAllUser() {
// TODO Auto-generated method stub
System.out.println("User");
return null;
}
}
2、service
注意:如果直接写@Service那么它的value就是当前类名的首字母小写userServiceimpl
package com.test.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.test.dao.UserDao;
import com.test.dao.impl.UserDaolmpl;
import com.test.domain.User;
import com.test.service.UserService;
/*Component的三个衍生注解(这三个注解是为了让标注类本身的用途清晰,Spring 在后续版本会对其增强):
Controller:web层
Service:业务层
Repository:持久层*/
//@Component(value = "userService")
@Service(value = "userService")
public class UserServiceimpl implements UserService{
//这里需要导入javaEE的注解包;首先按名字进行装配,如果找不到就按照类型进行装配(如果已经按名字来找了的话,找不到就会报错)
//@Resource(name="userdao")
//这个不需要导包,或者说已经导入过了;它是Spring自带的;默认直接按照类型进行装配,如果需要按照名字装配必须使用@Qualifier
@Autowired
private UserDao userdao;
// public UserDao getUserdao() {
// return userdao;
// }
// //注解也可以作用到set方法(只是这种方法使用的很少)
// @Resource(name="userDao")
// public void setUserdao(UserDao userdao) {
// this.userdao = userdao;
// }
@Override
public List<User> queryUser() {
//UserDao userdao = new UserDaolmpl();
userdao.findAllUser();
System.out.println("over1");
return null;
}
}
3、测试
package springpro1;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.test.dao.Order;
import com.test.dao.UserDao;
import com.test.domain.User;
import com.test.service.UserService;
public class TestDemo1 {
@Test
public void test3(){
ApplicationContext ap = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) ap.getBean("userService");
userService.queryUser();
}
}
Bean 的作用范围的注解
@Scope:
-
singleton:单例
-
prototype:多例
在当前注解下面设置就可以改变它是单列或者多列