<bean>
cn.tedu.spring
,spring不只会扫描这个包,还会扫描它的各个层级子包,例如:cn.tedu.spring.dao
<context:component-scan base-package="cn.tedu.spring"></context:component-scan>
spring
是不会自动管理bean的,而是自动的扫描package
,要想自动管理bean,那么还需要配置注解@Component
注解,可以是的spring知道这个类是一个组件,需要进行管理,所以如过某个类需要被Spring管理,应该将这个类放在被扫描的包中,并且添加注解@Component
注解标记的类),会由Spring自动设置Bean Id
,值为将类名首字母小写的名称,例如组件类的名称是UserDao
,则配置的Bean的id是userDao
,如果需要自定义Bean,那么可以直接在注解中设置,比如@Component("id")
@Component
: 通用注解@Service
: 用于对业务逻辑类的注解(Service层)@Controller
: 用于对控制器类的注解@Repository
:用于对持久层处理类的注解(Dao层)@Named
:通用注解(不用)UserService
类的,应该使用@Service
@Scope("prototype")
表示非单例,默认是单例@Lazy("true")
用于设置成懒加载 /**
* 初始化方法: 应该是public的,无返回参数,无参数的
*/
@PostConstruct //定义初始化方法,在构造方法之后执行
public void init(){
System.out.println("初始化方法");
}
@PreDestroy //定义销毁方法
public void destroy(){
System.out.println("销毁方法");
}
@Autowired
,用于标记该属性是自动装配值byType
)实现自动装配@Qualifier("userDao")
来组合使用,注解中配置的名称是需要注入的值的Bean-Id
UserDao
@Repository("userDao")
public class UserDaoImpl implements UserDao{
public void reg() {
System.out.println("reg");
}
}
UserService
@Service
public class UserService {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
public void reg(){
userDao.reg();
}
}
@Resource //这里会先自动匹配和属性名一样的Bean Id,如果没有匹配到,那么就按照类型进行匹配
private UserDao userDao;
@Resource(name="userDaoImpl")
,name属性指定的是Bean Id
,添加了name属性,那么只是按照名称来装配,如果这个名称对应的Bean不存在,那么就注入失败 @Resource(name="userDaoImpl") //这里只会匹配Bean Id为userDaoImpl的,如果匹配不上,那么报异常
private UserDao userDao;
@Value
注解添加在属性的声明的上方,可以对属性注入值 @Value("陈加兵")
private String name;
@Value("#{beanId.属性名}")
的注解时还可以使用Spring表达式原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。