1.导包
1.2 导入约束
在applicationContext.xml添加以下代码
xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context |
1.3指定要扫描的包
<!--指定扫描的位置,自动扫描该包以及该包的所有子包--> |
1.4为类声明注解
在类声明书写一段代码(最原始的注解)
相当于在.xml中写的 bean name=user class=cn.hd.annotation.User |
为了解决所有的bean类都是一个注解,导致系统的层次不清晰,提出里三个注解
@Conponent是一个泛化的概念,仅仅表示一个组件(Bean),可以作用在任何层次
@Service通常作用在业务层,目前该功能与@Component相同
@Constroller通常作用在控制层
@Repository通常作用在dao层
@Component("user")(这个不是哦,也可以用) |
没有强制要求,都可以用,提倡按照它的本意去注解
修改scope属性
@Scope("scopeName=prototype")
singleton/prototype单例和多例 可以写request,response,session |
属性注入
(1)属性注入
注释写在属性上面,同时也可以写在set方法上面
public class User { |
(2)引用类型
@Autowired注释,它可以对类成员变量,方法以及构造函数进行标注,完成自动封装。(如果是多个不使用@Autowired)
@Qualifier的标注对象是成员变量,方法入参,构造函数入参。
@Qualifier只能和@Autowired结合使用,是对@Autowired有益的补充。一般来讲,@Qualifier
对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,,面@Resource默认按byName自动注入罢了。@Resource有两个属性是比较重要的,分别是name和type,String将@resource注释的name属性解析为Bean的名字,而type属性则解析为Bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byName自动注入。如果既不指定name也不指定type属性,这时将会通过反射机制使用byName自动注入
@Autowired //自动装配 如果只有一个对象,自动装配 |
(3)创建对象后就执行的方法
@PostConstruct
|
@Test |
Spring结合junit
1.导包
2.书写测试代码
@RunWith(SpringJUnit4ClassRunner.class) |
@RunWith(SpringJUnit4ClassRunner.class)
结合Junit测试
@ContextConfiguration("classpath:cn/hd/annotation/applicationContext.xml")
读取文件配置
由于原来使用的是ApplicationContext对象,读取配置和获得bean对象,但是没有了,又想获得对象,这时可以使用下面的代码
@Resource(name = "user")
private User user;