一、Spring 2.5 注解概述
1. 注入类
-
@Component:定义通用Bean的注解,适合无法明确归属层次的Bean。
- 相当于XML配置中的
<bean id="" class=""></bean>
- 示例:
@Component class User {}
- 相当于XML配置中的
-
@Service:专用于数据访问层的Bean。
-
@Repository:用于业务层的Bean。
-
@Controller:针对控制层的Bean。
注:
@Service
、@Repository
和@Controller
功能和语法相同。
2. 注入基本数据
-
@Value:注入基本属性数据。
-
类似于XML中的
<property>
,可用于成员变量或set方法。 -
示例:
@Value("数据内容") private String data;
-
XML配置:
<context:property-placeholder location="classpath:jdbc.properties"/>
-
-
@Autowired:通过set方法进行类型装配,set方法可省略。
-
语法:
@Autowired(required = true)
-
示例:
@Autowired private IAccountService accountService;
-
注意事项:
- 默认按类型装配。
- 当有多个相同类型Bean时,自动切换为名称装配,若无则报错。
-
3. 其他注解
-
@Primary:指明首选的Bean。
示例:@Service @Primary public class MainServiceImpl implements MainService {// ... }
-
@Qualifier:指定具体注入的Bean。
示例:@Autowired @Qualifier("mainService") private MainService mainService;
-
@Scope:定义Bean的作用域(如singleton和prototype)。
示例:@Service @Scope("prototype") public class PrototypeService {// ... }
-
@PostConstruct:依赖注入完成后调用,用于初始化。
示例:@PostConstruct public void initialize() {System.out.println("Initializing..."); }
-
@PreDestroy:对象销毁前调用,用于清理工作。
示例:@PreDestroy public void cleanup() {System.out.println("Cleaning up..."); }
二、Spring 3.0 注解新特性
1. @Configuration
表示类为配置类,替代XML配置文件。
示例:
@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}
2. @ComponentScan
扫描指定包及其子包下的所有组件。
示例:
@Configuration
@ComponentScan(basePackages = {"com.example.service", "com.example.repository"})
public class AppConfig {// ...
}
3. @PropertySource
指定外部属性文件位置,加载配置属性。
示例:
@Configuration
@PropertySource("classpath:application.properties")
public class AppConfig {@Autowiredprivate Environment env;@Value("${my.property}")private String myProperty;
}
4. @Bean
在配置类中定义Bean,替代XML中的 <bean>
。
示例:
@Configuration
public class AppConfig {@Beanpublic Date myDate() {return new Date();}
}
5. @Import
导入其他配置类或静态工厂类。
示例:
@Configuration
@Import(OtherConfig.class)
public class AppConfig {
}
这些注解显著简化了Spring的配置方式,提高了代码的可读性与可维护性。灵活运用这些注解,能够更高效地构建和管理Spring应用程序,让开发过程变得更为顺畅。