一·IOC(控制反转)
spring 容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,一句话,所有的对象都可以放在一个spring容器里,由spring容器来创建对象,而代码中只需要接受对象,spring容器可以为一个xml文件,在里面配置类,并可以在外面获取,控制权来到了spring容器这里。
二·导入jar包
spring 容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,一句话,所有的对象都可以放在一个spring容器里,由spring容器来创建对象,而代码中只需要接受对象,spring容器可以为一个xml文件,在里面配置类,并可以在外面获取,控制权来到了spring容器这里。
从maven仓库中寻找依赖:
org.springframework
spring-webmvc
5.3.10
三·Hellospring
创建实体类pojo,Hello类。
public class Hello {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@Override
public String toString() {
return "Hello{" +
"str='" + str + ''' +
'}';
}
}
创建beans.xml:
在xml文件中使用bean标签,id表示对象的名称,方便于被接受,class为当前pojo的全包名路径,
property标签设置实体类中的属性,这是基于实体类的set方法来实现的,如果没有set方法,则会报错,
外部获取不同的对象:
public class MyTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Hello hello = (Hello) context.getBean("hello");
System.out.println(hello.toString());
hello = (Hello) context.getBean("hello2");
System.out.println(hello);
}
}
四:属性为对象的情况
UserDao接口:
public interface UserDao {
void getUser();
}
实现类:
public class UserMysqlDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("Mysql获取数据");
}
}
public class UserOracleDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("Oracle获取数据");
}
}
public class UserSqlServerDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("SqlServer获取数据");
}
}
UserService接口:
public interface UserService {
void getUser();
}
实现类:
public class UserServiceImpl implements UserService{
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
beans.xml:
用ref去引用已经注册在容器的bean
测试:
修改beans.xml文件中UserService的属性配置,即可获取不同的UserDao,来获取不同数据库的数据,达到解耦的效果。
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserServiceImpl userService = (UserServiceImpl) context.getBean("UserService");
userService.getUser();
}
}
五·创建对象的方式
默认是通过无参构造创建
在
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
的时候就将对象实例化,后面直接获取就行。
如下:
System.out.println("context之前");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
System.out.println("context之后");
beans.xml中有两个使用无参构造,所以输出为:
在也可以通过有参构造创建,创建时要保证有相应的构造方法。
1.通过name属性构造,属性的名称
2.通过属性的下标,从0开始
3.通过属性的类名,引用类型需要写全包名,不建议,解决不了重复类型的情况。
注意:在spring容器中获取的同id是同一个对象,以下输出为true!
Hello hello = (Hello) context.getBean("hello");
System.out.println(hello.toString());
Hello hello1 = (Hello) context.getBean("hello");
System.out.println(hello==hello1);



