Spring2.5引入了注解方式去定义bean
@Component 描述spring框架中的bean
@Component("demo")//@Component()里面的是一个id或者是name
public class Demo{
//内部代码
}
按照上面写的去尝试会出现错误,那是因为没有定义context在applicationContext.xml文件中。下面是配置applicationContext.xml,我使用的是spring3.2的jar.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan basepackage="com.springdemo.bean" />
<!-- 上面在beans定义xmlns:context,还有引用schschema-->
<!--在beans内定义context扫描器,package是你要扫描的包,如果有比较多的包那直接写全部包的父类-->
</beans>
除了上面Component,还有这几种
- @Repository 用于对DAO实现类进行标注
- @Service 用于对Service实现类进行标注
- @Controller 用于对Controller实现类进行标注
- @Name 这和Component一样,都是通用的
自动装配:
- spring3.0以上的版本使用是@Value
- spring2.5使用的是@Autowired和@Qualifier,@Autowired自动装配,根据你参数名去找,但是有可能出现多个同样的类包名不一样的,那就需要使用到@Qualifier去指定。
- Spring提供对JSR-250中定义@Resource标准注解的支持
@Component("demo")
public class Demo {
public Demo(){
System.out.println("Demo实例化");
}
}
//使用@Autowired和@Qualifier
@Component("demofactory")
public class DemoFactory {
@Autowired
@Qualifier("demo")
private Demo demo;
public DemoFactory(){
System.out.println("DemoFactory实例化");
}
public static Demo getInstance(){
return new Demo();
}
}
//使用@Value
@Component("demofactory")
public class DemoFactory {
@Value("demo")
private Demo demo;
public DemoFactory(){
System.out.println("DemoFactory实例化");
}
public static Demo getInstance(){
return new Demo();
}
}
//使用@Resoure
@Component("demofactory")
public class DemoFactory {
@Resource(name="demo")
private Demo demo;
public DemoFactory(){
System.out.println("DemoFactory实例化");
}
public static Demo getInstance(){
return new Demo();
}
}
在spring2.5 版本,没有提供基本类型属性注入 ,但是spring3.0引入注解@Value
下面是使用@Value去注入
@Component("demo")
public class Demo {
@Value("#{吊炸天}")//使用到了SPEl表达式和El表达式差不多,作用非常强大
private String nameString;
@Value("100")
private int age;
@Value("male")
private char gender;
public Demo(){
System.out.println("Demo实例化");
}
}
大概地总结了spring使用注解方式和解决依赖的关系