
给分成了三层,后面的mapper就是mybatis的,如果要获取其他对象就需要在这里面创建类,比如BookService2 b = new BookService2这样,但只要一改名字,就需要把所有的对象名字都改,这样耦合度太高。就需要用到spring容器来进行统一管理
ioc就是控制反转的意思,把创建对象的权利交给spring容器

会有一个配置文件叫applicationcontext.xml,里面存放了bean这个,id就是名字,class是类型,然后他自动通过反射机制创建对象,然后放到spring容器里,这个容器可以理解成一个筐,苹果放一个筐梨放一个筐,然后再从这个容器里读取到java程序



1 2 3 4
| <bean id = "b" class = 'com.msb.pojo.Book'> <property name="id" value="1"></property> <property name="name" value="项目驱动零起点"></property> </bean>
|
如果对应的set方法里是setId1,那么上面的name=id就要改成id1,只跟这个set方法有关,跟属性名无关
1 2 3
| public void setId1(int id){ this.id = id; }
|
构造注入
1 2 3 4
| <bean id = "b2" class = 'com.msb.pojo.Book'> <constructor-arg name="id2" value="1"></constructor-arg> <constructor-arg name="name2" value="项目驱动零起点"></constructor-arg> </bean>
|
这里的id名就和构造方法里的参数有关了
1 2 3 4
| public Book(int id2, String name2){ this.id=id2; this.name=name2; }
|
Spring属性注入的方式:
设置属性的值:
方式一:value:简单数据类型(基本数据类型+String)直接设置;
方式二:ref:需要引用另一个bean的id,也就是说这个参数是一个类类型,且这个类的对象也被spring容器管理
1 2 3 4 5 6 7 8 9
| <bean id = "boy" class = 'com.msb.pojo.Book'> <property name="age" value="22"></property> <property name="name" value="小明"></property> </bean> <bean id = "girl" class = 'com.msb.pojo.Book'> <property name="age" value="19"></property> <property name="name" value="露露"></property> <property name="boyfriend" ref="boy"></property>//这里要注意 </bean>
|
1 2 3 4 5 6 7 8 9
| public class Test3{ public static void main(String[] args){ ApplicationContext context = new ClassPathXmlApplicationContest("application.xml"); Girl g = (Girl)context.getBean("girl"); System.out.println("")) } }
|
注解的引入:

前面的几个都是一样的作用,分别用于不同的层,这样可以区分,直接写@Component也可以
@Component
在要创建对象的类中加入@Component注解,对象名字默认为:类名首字母变小写
注解要在哪个包下?要想找到这些注解,需要将注解所在的包进行扫描:设置需要扫描的包,并且需要在applicationContext.xml中添加context命名空间
加到某个类上,他识别到就自动创建具体的对象

1 2 3 4 5 6
| xmlns:context="http://www.springframework.org/schema/context" xsi:scheamLocation=" http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"
<context:component-scan base-package="com.msb.pojo"></context:component-scan>#这个包名要和自己的对应,这就是要扫描的包
|
@value

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Conponent public class Girl{ @Value("18") private int age; @Value("丽丽") private String name; @Autowired private Boy boyfriend; }
@Conponent public class Boy{ @Value("21") private int age; }
|