1 @Component:组件
---修饰一个类,将这个类交给Spring管理
---这个注解有三个衍生注解(功能类似)
-------------@Controller :web层
-------------@Service :service层
-------------@Repository:dao层
在Spring4中这三个衍生注解暂时和Component暂时没有区别,和上一篇文章类似,在后续各个衍生类会有自己的特性
2 属性注入的注解
---普通属性:
----------@Value:设置普通属性的值(这个用法见上篇文章)
---对象类型的属性
----------@Autoware(用法如下):他是根据类型注入的不是根据bean的名称注入
这里的UserService接口只有一个方法save
package com.heshihua.spring.demo1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl implements UserService{
//注入DAO
@Autowired
private UserDao userDao;
public void save() {
System.out.println("userService 的save方法已经执行了");
userDao.save();
}
}
运行结果
运行结果中第二行的输出来自于userDao的save方法说明我们成功注入了userDao属性
如果想要根据bean的名称进行注入按照如下方式
在@Autowired的下面加入@Qualifire(value = "bean名称")、
----------@Resource :完成对象类型的属性注入,按照bean名称完成的属性注入,用法如下
这里有的人或许会出现引入resource包出错,可以用maven下载就好了,然后把包引入
3 bean的其他注解
3.1 生命周期的注解
以下代码有俩种扫描方式
<!-- <context:component-scan base-package="com.heshihua.spring.demo1,com.heshihua.spring.demo2">
</context:component-scan> -->
<context:component-scan base-package="com.heshihua.spring">
</context:component-scan>
这俩种方式是同一个效果的
生命周期的注解方式
package com.heshihua.spring.demo2;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.stereotype.Service;
@Service("customerService")
public class CustomerService {//<bean id = "" class = "" destroy-method = "" init-method = ""/>
@PostConstruct // 相当于init-method
public void init() {
System.out.println("CustomerService被初始化了");
}
public void save() {
System.out.println("service的sava 方法执行了");
}
@PreDestroy //相当于destroy-method
public void destory() {
System.out.println("CustomerService被销毁了");
}
}
初始化和销毁的注解分别加在你创建的方法上面就可以了
3.2bean的作用范围的注解
------scope :作用范围
----------singleton :单例(默认)
----------prototype :多例
----------request
----------session
----------globalsession
这里和xml方式比较类似