首先创建maven项目
在pom.xml里导入依赖文件下图是导入spring的jar包
在创建三层结构
在创建个spring_ioc.xml文件
注解如下图所示
注意注解一定要标记到类上去,标记到接口上注解不生效
实体类为非三层的所以用下面的注解
让以上注解生效需要在xml文件中写入扫描包让对应注解的类自动生成bean(对象)
base-package是要扫描对应包下面的类如果类中有注解就生成bean
不是每个层都对应自己的注解也可以用其他层的注解,但是为什么最好用自己的注解呢,方便管理如下图用exclude-filter type="annnotation"可以根据注解来排除,下图排除的类型是Controller注解
下图是包含和排除的方法
用注解生成bean的过程如下图
原先基于xml的方式,会根据id来决定bean的名字,现在根据类的名字首字母小写来设置类的名字
注解的方式如何给属性赋值方法用@Value
引用外部属性资源文件的方法先在.xml文件中导入要依赖的资源包在value用${}的方式引用
#{}是获取外部bean属性的方式,注意引用的bean一定要加入注解
用@Autowired注解来代替在xml里写自动注入
如果如下图引用的接口中有多个类就会按名字匹配,名字就是对应画横线首字母小写把他写到箭头指的UserService后面就能对应的自动注入了
也可以通过修改要引用bean的名字在对应注解里如下下图的方式
还可以通过@Qualifier的方式来设置要自动注入bean的名字
还可以设置@Primary来设置主要的bean
如果需要的类要有返回值的话我们应该怎么办的,我们就得用到泛型,通过把接口改为泛型的方式
来确定我们要自动注入的值接口<User>就是自动注入UserSericeImpl,接口是<Role>就是自动注入RoleSericeImpl
@Autowired也可以写到方法和构造器上面
还可以用@Resource(来自jdk不是来自于spring了)来实现自动注入
替代xml里depond-on的方法用@DependsOn程序是从上往下加载的所以先加载Role在加载User在Role加上此注解就让User先加载了
xml里的懒加载(正常不加懒加载bean的生成就会根据记载spring上下文时加载,如果加上@Lazy就是在用到此类的时候才会生成bean)在注解中的用@Lazy替代
正常spring只会加载一次bean也就是只会创建一次类不管你getBean多少次你也只是同一个bean,如果你想同一类加载多次的话就用@Scope来代替xml里作用域
1.怎样开启注解装配
解在xml里用<context:component-scan base-package="cn.tulingxueyuan"></context:component-scan>
2.@Component, @Controller, @Repository, @Service 有何区别?
总的来说最好在那个层用那个注解方便管理,还可以增强可读性
3.当使用@AutoWired匹配到多个类型怎么解决?
上图文章中有详解