需要的jar包:
commons-logging-1.1.3.jar
spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
一、设置简单扫描标签和简单注解
在spring的配置文件中配置一个<context:compont-scanbasePackage="">标签
<!-- <context:component-scan>扫描包 属性base-package用来扫描指定的包,一旦指定了扫描的包, 该扫描包及该扫描包下的子包下的所有加了注解的类都会被扫描包当前容器中生成bean对象 --> <context:component-scan base-package="com.atguigu"></context:component-scan>
Book类
package com.atguigu.beans; import org.springframework.stereotype.Component; @Component public class Book { private int bid; private String bname; private double price; public int getBid() { return bid; } public void setBid(int bid) { this.bid = bid; } public String getBname() { return bname; } public void setBname(String bname) { this.bname = bname; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Book{" + "bid=" + bid + ", bname='" + bname + '\'' + ", price=" + price + '}'; } }
测试类:
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Book bean = context.getBean(Book.class); System.out.println(bean); }
运行结果:
结果是只有初始值的Book对象,无误
二、几个常用的注解
@Controller:标记在类上,表示当前类对象是容器中的一个web层组件
@Service:标记在类上,表示当前类对象是容器中的一个service层组件
@Repository:标记在类上,表示当前类对象是容器中的一个dao层组件
@Component:标记在类上,表示当前类对象是容器中的一个普通组件,强调不要加在bean层类上
以上注解的共同点:
1、都标记在类上,都是在容器中生成一个对象,默认是单例的
2、都有一个value属性,value属性值表示的是当前类对象在容器中的id值
3、如果不指定这些注解的value属性的时候,当前bean对象在容器中的id值是当前类名首字母小写,如果自己指定了注解value属性值,在获取对象的时候,要使用自己指定的value属性值获取,当一个注解只有value属性值的时候,value=是可以省略的。
三、@Scope
标记在类上,方法上,使用和含义同<bean>标签的scope属性一样、
四、基于注解的方式给对象属性赋值
@value:相当于xml文件中的value值,给基本类型的属性赋值
@Autowired:相当于xml中ref属性值,给引用类型的属性赋值,spring框架
@Resource:相当于xml文件中的ref属性值,给引用类型的属性赋值,JDK中的
基于注解的方式给对象属性赋值,不需要提供set方法