Spring-core简单总结

分类:JavaWeb框架开发技术理解

作者:Stephen

Spring容器

功能:创建并用来管理Bean对象的容器

创建:使用了反射机制,创建Bean的实例(通过Class.forName("").newInstance())

容器的设计:使用了工厂模式(BeanFactory)

管理和实现模式:容器中的每一个Bean对象,Spring容器默认按照单例方式进行管理,可以通过设置

属性进行设置为每一次都是不同对象的实例

ApplicationContext(容器的高级接口)

第一个实现类:ClassPathXmlApplicationContext-->在classpath路径下加载xml配置文件,完成Spring容器的加载;或使用注解,就需要在xml配置文件中使用完成类的扫描。

示例代码:

//创建Spring容器

ClassPathXmlApplicationContextcontext=newClassPathXmlApplicationContext("spring-config.xml");

//通过容器的getBean方法获取相应名称的bean对象

MessageControllermessageController=(MessageController)context.getBean("messageControllerBean");

//直接调用其方法

messageController.executeSendMessage();

AnnotationConfigApplicationContext :基于全部使用注解的方式来加载配置spring的容器

示例代码:

//基于注解形式的applicationcontext对象创建spring容器的方法

//直接进行包的扫描和配置,无需写xml配置文件

ApplicationContextcontext=newAnnotationConfigApplicationContext("com.apesource");

//没设置名字的时候要使用默认的类名首字母小写作为创建的对象名

UserControlleruserController=(UserController)context.getBean("userController");

userController.userDosth();

细节:

容器中如果没有这个对象获取组件的话报异常NoSuchBeanDefinitionException  组件未定义异常 

property赋值调用setter方法进行赋值 

javaBean的属性名由什么决定的?getter/setter方法的set/get后面的名字  getter/setter全部自动生成的   

如果ioc容器中这个类型的bean有多个用类型找就会报NoUniqueBeanDefinitionException异常 ;这个时候就只能通过bean的id来找,但是可以用ioc.getBean(id,class)方法就可以找到 .

对于IoC或者DI的理解

IoC:Inverse of Control(控制反转)

DI:Dependency Injection(依赖注入)

两者本质相同,表达的思想理念都是:对于开发过程中,将所有的类(组件)的创建和配置全部交给Spring容器来进行管理,按照类彼此之间的依赖关系(A调用B则:A依赖B)采用xml配置文件的方式或者注解的方式,完成组件之间的配置与注入,主要是为了解决类与类之间的耦合关系。

共有三种注入方式:

1.属性注入(调用setter方法,用到了反射)

2.构造注入(使用有参构造方法进行注入)

3.接口注入(不常用)

示例代码:

   

注解的使用

进行Bean组件声明的注解

@Component:组件(使用范围较大不够准确)

@Controller:控制器组件(控制器专用)

@Service:业务层组件(业务层专用)

@Repository:数据访问层组件

进行注入装配时的声明注解

Spring自带的注解

@Autowired:自动装配(默认的装配方式是按照类型),按照当前声明的接口类型 ,在容器中查找该接口的实现类对象Bean,来进行自动装配(注入)。

@Qualifier:按照Bean名称自动装配,需要和@Autowired注解配合使用。

Java标准注解

@Resource:javax扩展包下的注解,完成自动注入,默认按照类型自动注入,也可以使用name属性进行按名称自动注入。

示例代码:

@Controller

publicclassUserController{

@Autowired

@Qualifier("vipUserServiceBean")

@Resource(name="vipUserServiceBean")

privateIUserServiceiUserService;

publicvoiduserDosth(){

System.out.println("【web层】使用注解进行对bean的配置");

iUserService.register();

iUserService.login();

iUserService.logout();

   }

}

两者比较:@Autowired:最强大,Spring自己的注解

  @Resource:扩展性更强,如果切换成另外一个容器框架,同样可以使用,但是@Autowired就不可以

你可能感兴趣的:(Spring-core简单总结)