简介:Spring注解开发一、Spring注解原著Spring是一个代码轻配置重的框架。配置比较重,影响开发效率。因此,注释的发展是一种趋势。注解可以通过替换xml配置文件来简化配置,提高开发效率。Spring原有的注解主要是替换的配置在这里插入图片描述注意:使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,就是指定哪个package及其子下的bean需要扫描包以识别使用注释配置的类、字段和方法。2。xml方法配置实现userDaopublicinterfaceUserDao{publicvoidsave();}userDaoImplpublicclassUserDaoImplimplementsUserDao{@Overridepublicvoidsave(){System.out.println("saverunning...");}}userServicepublicinterfaceUserService{publicvoidsave();}userServiceImplpublicclassUserServiceImplimplementsUserService{privateUserDaouserDao;publicvoidsetUserDao(UserDaouserDao){this.userDao=userDao;}@Overridepublicvoidsave(){userDao.save();}}applicationContext.xmlUserControllerpublicclassUserController{publicstaticvoidmain(String[]args){ApplicationContextapp=newClassPathXmlApplicationContext("applicationContext.xml");UserServiceuserService=app.getBean(UserService.class);用户服务.保存();}}这里插入图片描述@Component("userDao")替换下面的bean配置@Component("userDao")在这里插入图片描述userServiceImpl下在这里插入图片描述在applicationContext.xml下配置组件要扫描的包测试:xml配置和注解配置达到同样的效果Using@Component注解不能马上实现它在哪一层,所以Spring派生了三个注解:@Repository、@Service、@Controller,效果和@Component一样,可读性更好注意:使用注解时方法,set方法可以省略。例如:删除userServiceImpl中的set方法,同样可以运行成功:因为在属性上释放注解,通过反射直接赋值属性,下面的方法也可以使用赋值的属性。但是如果使用xml配置,set方法不能省略。把上面的@Qualifier("userDao")注释掉,就可以运行成功了。直接写@Autowired也可以注入。因为@Autowired是根据数据类型从Spring容器中匹配出来的,所以Spring在扫描这个注解的时候,会直接从Spring容器中找一个userDao类型的bean,找到之后直接注入。如果容器中有多个UserDao类型的bean,就不能这样写了。按类型注入,@Autowired按名称注入,@Autowired和@Qualifier要配合使用injectstrings@Scope标记Bean的范围。使用@PostConstruct标记初始化方法,使用@PreDestroy标记销毁方法。这里没有打印出销毁方法的原因:因为容器是在程序关闭之前执行的,所以没有打印出销毁方法。手动关闭可以看到打印了销毁的方法。4、新的Spring注解并不能完全替代使用上述注解的xml配置文件,需要注解替代的配置如下:非自定义Bean配置:加载properties文件的配置:组件扫描的配置:引入其他文件:下面是使用注解完全替代xml文件配置的实现,新建一个核心配置类:SpringConfiguration,其中相当于通用配置//标识修改类是Spring核心配置类@Configuration//@ComponentScan("com.xdr630")//@Import({DataSourceConfiguration.class})publicclassSpringConfiguration{}@Import({DataSourceConfiguration.class})里面的值其实是一个数组,可以加载多个类,如:@Import({DataSourceConfiguration.class,xxx.class})新建一个数据源配置类:DataSourceConfiguration,相当于子配置//@PropertySource("classpath:jdbc.properties")publicclassDataSourceConfiguration{@Value("${jdbc.driver}")privateStringdriver;@Value("${jdbc.url}")私有字符串url;@Value("${jdbc.username}")私有字符串用户名;@Value("${jdbc.password}")私有字符串密码;@Bean("dataSource")//Spring会将当前方法的返回值存储到指定名称的Spring容器中dataSource.setDriverClass(驱动程序);dataSource.setJdbcUrl(url);dataSource.setUser(用户名);dataSource.setPassword(密码);返回数据源;}}测试加载核心配置类创建Spring容器publicclassUserController{publicstaticvoidmain(String[]args){//ApplicationContextapp=newClassPathXmlApplicationContext("applicationContext.xml");ApplicationContextapp=newAnnotationConfigApplicationContext(SpringConfiguration.class);UserServiceuserService=app.getBean(UserService.class);用户服务.保存();}}原文链接本文为阿里云原创内容,未经允许不得转载