多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 步骤 1. 导入spring-aop.jar 2. 开启注解扫描器,告诉spring应该去哪个包下面解析注解. 3. 配置注解组件. 4. 测试. ## 正式开发规则 两种情况: 1. 全XML配置. 2. 半XML半注解. 自己的类全是注解,别人的类都是XML配置. ## 运行流程 加载配置文件: ~~~ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = (UserService) context.getBean("userService"); userService.save(); ~~~ 开启注解扫描: ~~~ <context:component-scan base-package="com.like"/> ~~~ ~~~ @Component("userDao") //可以定义在类上,那么注解扫描器只要扫描到就会创建该类的实例对象,放到spring容器中 public class UserDaoImpl implements UserDao { @Override public void save() { System.out.println("dao"); } } ~~~ ~~~ @Component("userService") //扫描到有注解,创建对象 public class UserServiceImpl implements UserService { //配置 @Value("要开始操作了") //针对基本类型和String类型,如果使用了该注解,那么该属性的set方法可以不写 private String name; //自动去spring容器中找没有该类型的实例对象,如果有就直接赋值了(此时容器中有此类) @Autowired //定义在属性字段上,针对的是对象类型.如果定义在了那个对象上就会自动去spring容器中找该类型的实例对象赋值.注意,是类型,跟ID名称没有关系. @Qualifier("userDao") //如果容器中有两个该类型的实例,spring不知道要使用哪个的时候,可以加上该注解,指定名称.但是@Autowired注解不能少 @Resource(name = "userDao") //以上两个注解可以用这个代替,不写name是按类型指定,写上是按名称指定,但是基本不用,因为应用点比较窄 private UserDao userDao; @Override public void save() { System.out.println("service"); } @Override public String toString() { return "UserServiceImpl{" + "name='" + name + '\'' + ", userDao=" + userDao + '}'; } } ~~~ ## 了解的注解 1. @Scope("prototype") : 定义在类上,指定是单实例还是多实例. 2. @PostConstruct:初始化方法. 3. @PreDestroy:销毁方法. ## spring新注解 spring想用全注解的方式完全抛弃掉XML.全注解方式.也就是别人的类也想用注解. 需要一个条件,需要有一个注解类,就是不加载配置文件了,而是加载这个注解类.